copy 和 deepcopy

浅拷贝copy

1.id()查看内存编号
执行
a = 5
id(a) -10965024
b = a
id(b) - 10965024
结果:a和b中的内存编号是一样的
变量a和b其实都是对像的标签
ad = {"name":"Jack","lang":"python"}
bd = ad
、>>> id(ad)
139853935195120
、>>> id(bd)
139853935195120

使用copy

、>>> cd= ad.copy()
、>>> cd
{'name': 'Jack', 'lang': 'python'}
、>>> id(cd)
139853935195192
、>>> cd
{'name': 'Jack', 'lang': 'python'}
这个时候如果修改cd不会对ad造成任何影响

但是当key所对应的值是一个列表时

/>>> x = {'name':'xiaoming','hoby':['basketball','football']}
、>>> x
{'name': 'xiaoming', 'hoby': ['basketball', 'football']}
、>>> y = x.copy()
、>>> y
{'name': 'xiaoming', 'hoby': ['basketball', 'football']}
、>>> id(x)
139853934436000
、>>> id(y)
139853904439624
修改hoby时,x和y都发生了改变
、>>> y['hoby'].remove('football')
/>>> y
{'name': 'xiaoming', 'hoby': ['basketball']}
/>>> x
{'name': 'xiaoming', 'hoby': ['basketball']}
虽然x和y对应着两个不同的对象,但是其中一个键的值是列表,列表是同一个对象
所以把用copy实现的拷贝称为浅拷贝

深拷贝deepcopy

import copy
/>>> z
{'name': 'xiaoming', 'hoby': ['basketball', 'football']}
/>>> y = copy.deepcopy(z)
/>>> y
{'name': 'xiaoming', 'hoby': ['basketball', 'football']}
/>>> y['hoby'].remove('basketball')
/>>> y
{'name': 'xiaoming', 'hoby': ['basketball']}
/>>> z
{'name': 'xiaoming', 'hoby': ['basketball', 'football']}
这个时候修改y并不会对x造成影响

你可能感兴趣的:(copy 和 deepcopy)