您的位置:首页 > 编程语言 > Python开发

Python---copy()、deepcopy()与赋值的区别

2018-01-07 16:52 239 查看
首先直接上结论:

—–深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。

—–而等于赋值,并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。

—–而浅复制要分两种情况进行讨论:

1)当浅复制的值是不可变对象(数值,字符串,元组)时和“等于赋值”的情况一样,对象的id值与浅复制原来的值相同。原值改变,新值不改变。

2)当浅复制的值是可变对象(列表和字典)时会产生一个“不是那么独立的对象”存在。有两种情况:

第一种情况:复制的 对象中无复杂子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

第二种情况:复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。但是改变原来的值中的复杂子对象的值,会影响浅复制的值。同理,修改浅复制对象中的子对象的值,也会影响原来的值。

即:

对于简单的 object,例如不可变对象(数值,字符串,元组),用 shallow copy 和 deep copy 没区别。

复杂的 object,如 list 中套着list 的情况,shallow copy中的子list,并未从原 object 真的独立出来。也就是说,如果你改变原object的子list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对复制的理解不同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: