1. 浅拷贝
- 浅拷贝是对于一个对象的顶层拷贝
通俗的理解是:拷贝了引用,并没有拷贝内容
最常用的赋值语句其实就是浅拷贝。
copy模块中的copy.copy是浅拷贝
这里需要注意,e拷贝的是c里面所有的东西,在下面的例子中,c里面是两个指向(a和b),因此e拷贝了c里面的两个指向,而没有拷贝c的地址。也就是说浅拷贝是顶层拷贝。
2. 深拷贝
- 深拷贝是对于一个对象所有层次的拷贝(递归)
深拷贝不仅拷贝了指向,同时也重新开辟了内存空间,把指向的内容拷贝到了新的内存空间中。
---------------------------------------------------------------------------------------------------------------------------
注意:如果copy.copy和copy.deepcopy拷贝的是元组,并且元组内部的元素也是不可变的,那么它不会进行浅拷贝,仅仅是指向。原因:因为元组是不可变类型,那么意味着数据一定不能修改。和''=''一样。
注意:如果copy.copy和copy.deepcopy拷贝的是元组,但是元组内部的元素是可变的,那么copy.copy不会进行浅拷贝,仅仅是指向。而copy.deepcopy会进行深拷贝。
总而言之,如果拷贝的内容都是不可变类型的,那么copy.copy和copy.deepcopy一样,如果拷贝的内容中存在可变类型,那么copy.deepcopy就会进行递归拷贝。
-----------------------------------------------------------------------------------------------------------------
如果一个变量等于另一个变量的切片,那么也是浅拷贝