楼主说得已经很好了。下面,我自己补充点吧!
1,浅拷贝,没有拷贝到子对象。所以原始数据改变,没有被拷贝到的子对象会改变
[Python] 纯文本查看 复制代码 i1={'k3': ['hijack', 678], 'k2': 123, 'k1': 'hi'}
import copy
i2=copy.copy(i1)
i3=copy.deepcopy(i1)
现在改变原数据(最外层的),因为深拷贝和浅拷贝都涉及到了这一层,所以这一层的数据改变,不会影响拷贝的内容
[Python] 纯文本查看 复制代码 >>> i1["k4"]="add_data_test"
>>> i2
{'k3': ['hijack', 678], 'k2': 123, 'k1': 'hi'}
>>> i3
{'k3': ['hijack', 678], 'k2': 123, 'k1': 'hi'}
>>> i1
{'k3': ['hijack', 678], 'k2': 123, 'k1': 'hi', 'k4': 'add_data_test'}
现在改变原数据(最内层的),因为深拷贝没有涉及到这一层,所以浅拷贝的结果会受到影响,而深拷贝的话,里面的对象也是被拷贝了的,所以值不会被改变
[Python] 纯文本查看 复制代码 >>> i1["k3"].append("k3_test")
>>> i1
{'k3': ['hijack', 678, 'k3_test'], 'k2': 123, 'k1': 'hi', 'k4': 'add_data_test'}
>>> i2
{'k3': ['hijack', 678, 'k3_test'], 'k2': 123, 'k1': 'hi'}
>>> i3
{'k3': ['hijack', 678], 'k2': 123, 'k1': 'hi'}
>>>
总结:copy.copy()这个方法得到的对象是新对象,但是数据还是引用。
如果要完全得到一个新的一模一样的对象,要用copy.deepcopy()方法。这样,在改变新对象的时候,原对象才能不受影响,也就是保持原始数据不变
|