区别
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
解析
1、b = a: 赋值引用,a 和 b 都指向同一个对象。
赋值
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
浅拷贝
3、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
深拷贝
例子
import copy
data = [1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [8, 9, 0, 0]]
data_1 = data
# data_2 = data.copy() # 和调用copy.copy方法结果一致
data_2 = copy.copy(data)
data_right = copy.deepcopy(data)
data[1] = 22
data[-1].reverse()
print(data)
print(data_1)
print(data_2)
print(data_right)
[1, 22, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]] # 原有data
[1, 22, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]] # 赋值,可变变量和不可变变量都随之变化
[1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]] # 浅拷贝,可变变量随之变化, 不可变变量不变
[1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [8, 9, 0, 0]] # 深拷贝,可变变量和不可变变量都不变化
深拷贝才是真正意义上的拷贝,与原来完全独立
网友评论