今天用到Python深拷贝和浅拷贝,有点混淆,记录以备后续查阅。当Python创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用
- 直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变
- copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
- 深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
示例如下:
import copy
x = [3,4,7,[9,3,1],20,12]
y = x
z = x.copy()
w = copy.deepcopy(x)
x[2] = 111 # 将x的第三个值更改即将7改为111
print(y)
print(z)
print(w)
#输出
y: [3, 4, 111, [9, 3, 1], 20, 12]
z: [3, 4, 7, [9, 3, 1], 20, 12]
w: [3, 4, 7, [9, 3, 1], 20, 12]
import copy
xx = [3,4,7,[9,3,1],20,12]
yy = xx
zz = xx.copy()
ww = copy.deepcopy(xx)
xx[3][0] = 222 # 将xx的子元素值更改, 即[9, 3, 1]中的9改为222
print(yy)
print(zz)
print(ww)
#输出
yy: [3, 4, 7, [222, 3, 1], 20, 12]
zz: [3, 4, 7, [222, 3, 1], 20, 12]
ww: [3, 4, 7, [9, 3, 1], 20, 12]