a = [1,2]

b = a

python 深拷贝 浅拷贝

python中所有的赋值语句都是引用, 可以理解为浅拷贝。

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

想实现内存中内容的复制需要使用深拷贝。

python 深拷贝 浅拷贝

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

浅拷贝是引用;深拷贝不受原来数据的影响,因为它重新开辟了一段新的内存,重新拷贝了数据,而不是引用。

python 深拷贝 浅拷贝

python 深拷贝 浅拷贝

在运行的结果中,d 复制了c 的指向(a b 的引用,相当于拷贝快捷方式),但是拷贝后增加的内容不识别。

如果元组中只有普通的数据,copy.copy()   copy.deepcopy()也是指向,因为元组是不可变类型。对于元组中有列表等可变类型,用cop还是引用,用deepcopy就是深拷贝。元组这样的不可变类型,deepcopy 认为复制另一份是不必要的,所以也是引用。总结来说,copy.copy 是浅拷贝,拷贝它的上一层,deepcopy 是递归拷贝。

python 深拷贝 浅拷贝

如图: c = [a,b]

        d = copy.copy(c)   以后改变c,d 不变。 d = c[:] 与d = copy.copy(c)一样是浅拷贝。

dict中的value 值并不在字典里面存着,而存着它的引用。 运用hash 的方式,通过key ,找到value的值,所以只有一份value, copy.copy()   也是深拷贝。

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

在list传递参数的时候需要注意,是否需要改变原来列表的内容。python中,传递实参的时候,是赋值,传递的是引用浅拷贝 。

python 深拷贝 浅拷贝

 

相关文章: