- 浅拷贝的意思: 不会开辟内存,只是 增加指针而已, 当没有指针指向内存就垃圾回收
- 深拷贝的意思: 开辟两块内存,指针指向各自的内存
1.浅拷贝(=)
- 浅拷贝是一种对于对象的顶层拷贝;
- 即为拷贝了引用指向同一个地址;
看下面代码理解一下:
a=[11,22,33]
b=a #浅拷贝
print(b) #[11, 22, 33]
print(id(a)) #8530480
print(id(b)) #8530480
a.append(44) #追加一个元素
print(a) #[11, 22, 33,44]
print(b) #[11, 22, 33,44]
可以看出使用等号只能进行浅拷贝,即拷贝后两个对象指向了相同地址,追加元素后由于也是指向了相同地址,因为值也是相同;
2.深拷贝(deepcopy)
- 深拷贝即对所有层级的拷贝,指向的地址不同;
看下面代码理解一下:
import copy
a=[11,22,33]
c=copy.deepcopy(a) #进行深拷贝
print(a) [11, 22, 33]
print(id(a)) #4029016
print(id(c)) #4027896
a.append(44) #追加一个元素
print(a) #[11, 22, 33,44]
print(c) #[11, 22, 33]
深拷贝需要导入模块copy,使用deepcopy()方法进行深拷贝,拷贝后指向地址不同,因为给被拷贝对象添加元素也不会影响到拷贝后的元素;