没有合适的资源?快使用搜索试试~ 我知道了~
首页【Python 技巧】copy 模块中 copy() 与 deepcopy() 函数的区别
Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定关系。对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象。copy 模块提供了通用的浅层复制 copy() 和深层复制 deepcopy() 操作。 copy() 仅复制对象本身,而不对其中的子对象进行复制,如果对原子对象进行修改,那么浅层复制之后的对象也会随着修改。 deepcopy() 是真正意义上的复制,即重新开辟一片空间,经常说的复制实际上就是 deepcopy,深层复制之后的对象不受原对象的影响,无论原对象发生什么修改,深层复制的对象都不会发生改变。 >>> import c
资源详情
资源评论
资源推荐

【【Python 技巧】技巧】copy 模块中模块中 copy() 与与 deepcopy() 函数的函数的
区别区别
Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定关系。对于自身可变或者包含可变项的集合对象,开发者有
时会需要生成其副本用于改变操作,进而避免改变原对象。copy 模块提供了通用的浅层复制 copy() 和深层复制 deepcopy() 操
作。
copy() 仅复制对象本身,而不对其中的子对象进行复制,如果对原子对象进行修改,那么浅层复制之后的对象也会随着修改。
deepcopy() 是真正意义上的复制,即重新开辟一片空间,经常说的复制实际上就是 deepcopy,深层复制之后的对象不受原对象
的影响,无论原对象发生什么修改,深层复制的对象都不会发生改变。
>>> import copy
>>> list1 = [1, 2, [3, 4], 5] >>> list2 = copy.copy(list1)
>>> list3 = copy.deepcopy(list1)
>>> list2 == list3
True
>>> list2 is list3
False
以上两个列表 list2 和 list3 分别经过了浅层复制和深层复制,虽然值是一样的,但是本质上并不是同一个列表
>>> import copy
>>> list1 = [1, 2, [3, 4], 5] >>> list2 = copy.copy(list1)
>>> list3 = copy.deepcopy(list1)
>>> list1[2][0] = 3333
>>> list1
[1, 2, [3333, 4], 5] >>> list2
[1, 2, [3333, 4], 5] >>> list3
[1, 2, [3, 4], 5]
将原列表的子对象 [3, 4] 改成 [333, 4],可以看到浅层复制后 list2 的值也会改变,而深层复制后 list3 的值并不会改变。
简单来说:
浅层复制 copy():复制父对象,子对象仍然使用引用的方式;
深层复制 deepcopy():复制了对象和对象的所有子对象。
作者:TRHX


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0