1、浅拷贝、深拷贝是什么
标准类型中的列表、字典、Set集合和自定义类型的拷贝都涉及到浅拷贝和深拷贝。字符串和元组是不可变序列,值一改变就自动变成新变量;值类型存储的真实的值,而引用类型存储的是指针;
浅拷贝:给新变量分配新的内存,内存中的元素引用还是原元素
深拷贝:给新变量分配新的内存,并且也分配新内存存储着原元素的值
指针是一个变量,其值为另一个变量的地址
浅拷贝例子:
深拷贝例子:
2、区别
如果不考虑缓存机制,示意图如下
3、使用浅拷贝和深拷贝的方法
-
浅拷贝
列表:list(object)、copy.copy()
字典:dict(object)、copy.copy()
Set集合:
自定义类型:copy.copy() -
深拷贝
列表:copy.deepcopy()
字典:copy.deepcopy()
Set集合:
自定义类型:copy.deepcopy()
4、浅拷贝和深拷贝的应用场景
浅拷贝应用在对两个及以上引用对象时,共享元素的值,特别注意是共享的是元素的值,如果是其一对象,新增或删除元素,其它对象是不会新增或删除元素的,毕竟对象是重新分配的内存
深拷贝是完全没有任何联系的对象,新增、删除元素,或者修改元素的值,都不会对其他对象有影响