1.可变对象与不可变对象
创建变量:python创建一个变量,先创建了对象,然后在该对象上贴了一个变量名标签(也可以说变量名引用该对象)。
可变对象:支持在原处修改(可以对原地址存储的对象进行修改)
不可变对象:不支持在原处修改
注意:元组存储的是对里面对象的引用,是不可变对象,即:元组数据结构不可变(里面的引用(对象的标签)不可变),但是可以改变标签对应的对象(如果是可变数据类型)
2.深浅拷贝
-
浅拷贝
- 定义:拷贝不可变对象时创建新的对象,拷贝可变对象时拷贝引用(标签)
-
深拷贝
- 定义:拷贝不可变对象和可变对象时均创建新的对象
-
拷贝出现的问题:
-
驻留问题
-
问题描述:拷贝一些不可变对象时并没有创建新的对象,还是拷贝的引用。
-
比如元组(里面无可变对象),字符串,小整数等
>>> a = 1 >>> b = copy.deepcopy(a) >>> a is b True >>> a = (1, 2, 3) >>> b = copy.deepcopy(a) >>> a is b True >>> a = 'ABC' >>> b = copy.deepcopy(a) >>> a is b True
-
作用:CPython解释器的一种优化措施
-
-
元组的拷贝问题
-
浅拷贝都是拷贝的引用
-
深拷贝时对于元组中的不可变对象拷贝引用(基于上述驻留问题),可变对象创建新的副本对象
>>> a = (1, 2, [2, 3]) >>> b = copy.deepcopy(a) >>> c = copy.copy(a) >>> a is b False >>> a is c True >>> a[0] is b[0] True >>> a[2] is b[2] False
-
-