python进阶之 ——深浅拷贝
深浅拷贝:
浅拷贝:只拷贝第一层引用,改变原有被复制对象会影响复制出的对象。
深拷贝:整个拷贝,改变原有被复制对象不会影响复制出的对象。
import copy class X:pass x=X() x.data=[1,2,3] # 引用一个列表 x2=copy.copy(x) print(x2 is x) # False print(x2.data is x.data) # True,仅复制了引用,成员data仍指向原列表 x3=copy.deepcopy(x) print(x3 is x) # False print(x3.data is x.data) # False,成员data同样被复制 x3.data.append(4) # 向被复制data列表追加数据 print(x3.data) # [1, 2, 3, 4] print(x.data) # [1, 2, 3] # 不会影响原列表
对于简单的object,用shallow copy 和deep copy 没区别
复杂的情况:
list套list
- shallow copy中的子list仅复制了引用,成员data仍指向原列表,改变原object中的子list中的元素,copy对象会跟着一起改变。
-
deep copy则是作为一个独立的新个体单独存在。
deep copy 使用场景:列表/字典,且内部元素包含列表/字典。