浅复制
写在前面
这是笔者的在python学习过程中的一些笔记,如有误,还请谅解。
python学习心得(四)
由==copy()==方法解释浅复制
在字典类型的学习中,有这样一个方法copy(),在官方文档中,它的解释是这样的:
copy
()
Return a shallow copy of the dictionary.
事实上,copy方法实现的是一种浅复制,即只复制会简单复制对象内部的值,而不是复制整个对象
>>> d = {'a':1,'b':2,'c':3}
>>> d2 = d.copy()
>>> print(d,d2,id(d),id(d2))
{'a': 1, 'b': 2, 'c': 3} {'a': 1, 'b': 2, 'c': 3} 59960224 55173744
>>> d = d2
>>> print(d,d2,id(d),id(d2))
{'a': 1, 'b': 2, 'c': 3} {'a': 1, 'b': 2, 'c': 3} 55173744 55173744
由此,我们明显可以看出在d2 = d.copy()
处理后,d与d2的id有变化,说明此时的d与d2指向的并不是同一对象,而后d = d2
中,d与d2指向的是同一对象,因此他们的id相同
浅复制的好处:通过浅复制,复制以后的对象,和原对象是独立,修改一个不会影响另一个复制以后的对象,和原对象是独立,修改一个不会影响另一个。
注意:浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
>>> d = {'a':{'name':'孙悟空','age':18},'b':2,'c':3}
>>> d2 = d.copy()
>>> d2['a']['name'] = '猪八戒'
>>> print('d = ',d , id(d))
d = {'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 59999648
>>> print('d2 = ',d2 , id(d2))
d2 = {'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 55083968