深拷贝和浅拷贝

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就会进行递归拷贝。

 -----------------------------------------------------------------------------------------------------------------

如果一个变量等于另一个变量的切片,那么也是浅拷贝

原文地址:https://www.cnblogs.com/GouQ/p/13667647.html