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

  1. shallow copy中的子list仅复制了引用,成员data仍指向原列表,改变原object中的子list中的元素,copy对象会跟着一起改变。
  2.  deep copy则是作为一个独立的新个体单独存在。

 

deep copy 使用场景:列表/字典,且内部元素包含列表/字典。

posted @ 2019-05-14 16:08  呔!妖精。。。  阅读(65)  评论(0编辑  收藏  举报