官方说法有对深拷贝和浅拷贝的解释,之前面试的时候,也有被问到,但是实际上我几乎没有用上过,今天刚好用上了,总结一下,至于官方解释,关于浅拷贝只是拷贝了引用,深拷贝另辟空间的各种说法,大家可以自行google,我就简单记录一下使用。
1、我们最常用的拷贝是使用=,例如
>>>a = [11,22,33]
>>>b = a
>>>id(a)
25084152
>>>id(b)
25084152
>>>b.append(44)
>>>a
[11,22,33,44]
>>>b
[11,22,33,44]
可以发现,如果使用这种方式的话,a改变的时候,b也会改变,有很多情况下,我们不希望这样,那么这种情况如何解决呢?
2、copy.copy()
一般深拷贝和浅拷贝用在操作{}和[],例如:
a = {
'a': 1,
'b': 2,
}
如果想拷贝a给b,但是又不想出现上面1的情况,就可以使用浅拷贝copy(),那样a的值改变,就不会影响到b的值了
b = copy.copy()
3、copy.deepcopy()
但是有时候,字典或者列表里面会嵌套字典或者其他,这时候,如果还是使用浅拷贝的话,嵌套的那个字典就会出现1所说的情况,就是a中的嵌套字典改变的时候,b的嵌套字典也会改变,所有这时候,可以使用深拷贝
a = {
'a': 1,
'b': 2,
'c': {
'd': 4
}
}
b = copy.deepcopy()
这样a,b就不会被相互影响了。