浅拷贝和深拷贝----浅拷贝:只针对第一层开辟新内存存储,其他层依次引用; 深拷贝:所有层依次开辟新内存存储;
浅拷贝和深拷贝都是针对python的引用机制来说的。众所周知,python里面所有的赋值都是引用(指向),然而拷贝是复制,为什么会有引用呢?
浅拷贝由于你只拷贝了外在,没拷贝内在。所以你的内在还用的是人家的,就是引用了人家的,当人家内在一变,你的内在也跟着变。这就糟糕了,容易引发一些联动bug。
而深拷贝就是解决这个问题的。相当于我从头到脚、从里到外全部复制你一份,复制成我的,接着跟你就没有什么关系了。你变你的数值,也不会影响到我的数值。
所以我们可以看到,内在发生变化引起的联动bug使我们引入深拷贝的办法去解决。所以你能猜到不可变数据类型的深浅拷贝问题吗?
答对了!不可变数据类型没有深拷贝!!!因为即使数值发生变化,也会新建对象。和原值以及拷贝值没啥关系,没有人员伤亡。
python里面的可变数据类型的深拷贝用到copy这个模块,即
import copy
d = copy.deepcopy(a)
# 深拷贝仅针对可变数据类型。不可变数据类型深浅拷贝没啥区别,所以不可变数据类型没有copy.deepcopy()操作。
可以看下上方链接,讲的非常好。
1.浅拷贝图示,只有最外层被复制成新的了,内在用的还是人家的。
2.深拷贝图示