一、复制对象为不可变数据类型:
可以发现复制前后对象的id值(内存地址)相同,所以他们是对源数据的引用,没有生成新的对象
内存图:
二、复制对象为可变数据类型:
这里一列表为例:
对于列表中一般元素(不存在嵌套)来说,深浅拷贝没有区别,都是将目标对象复制出一份新的(内存地址不同)
1、浅拷贝
方式:
list.copy()
copy.copy(list)
2、深拷贝
copy.deepcopy(list)
而对于复合对象(存在嵌套数据),深浅拷贝就显现出区别来了
可以发现:
对于复合对象,浅拷贝只是将目标对象拷贝一个新的出来,对于嵌套的对象只是采用地址的引用,并没有复制新的数据(内存地址相同)
而深拷贝除了将目标对象拷贝出一个新的出来,对于嵌套的数据会递归复制新的出来,二者地址不同
内存图: