概念
- 浅拷贝
重新分配一块地址空间,创建一个对象,但是对象的元素是之间引用源对象的各个元素;- 深拷贝
不仅重新开辟一块空间,且会使用递归的方式将原对象的各个元素复制到新对象中,复制完毕之后两者就没有任何关联;
定义
深拷贝 copy.deepcopy()
浅拷贝 copy.copy()
代码
import copy
#原始对象
list = [[2,5,6],1,2,3]
#list1表示浅拷贝、list2表示深拷贝
list1=copy.copy(list)
list2=copy.deepcopy(list)
#分别输出内容和地址
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))
print("---------------------------------------------------------")
print("修改数组中的元素")
list[2]=800
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))
print("---------------------------------------------------------")
print("修改数组中子数组的元素")
list[0][0]=100
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))
总结
深浅拷贝都是会开辟一片新的地址空间,浅拷贝复制完如果原对象是修改的元素是可变对象,那么浅拷贝的新对象也会随之变化,深拷贝由于使用递归的方式进行复制,因此他不会受影响。