浅拷贝:是对于一个对象的顶层拷贝,通俗理解:拷贝了引用,并没有拷贝内容
- 代码说明
import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = c[:]
f = copy.copy(c)
print(id(c))
print(id(d))运行结果:
2473847637832
2473847637896给列表c追加元素
c.append(99)
print(c)
print(d)
print(f)运行结果:
[[11, 22], [33, 44], 99]
[[11, 22], [33, 44]]
[[11, 22], [33, 44]]再给a追加元素:
a.append(66)
print(c)
print(d)
print(f)运行结果:
[[11, 22, 66], [33, 44], 99]
[[11, 22, 66], [33, 44]]
[[11, 22, 66], [33, 44]] 解释说明:d、f列表和c列表都是引用了a,b列表,所以当a或者b元素改变时,d、f和c列表都会改变;也说明了[:] 是浅拷贝。
深拷贝:是对于一个对象所有层次的拷贝(递归)
- 代码说明
import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = copy.deepcopy(c)给a, c 同时追加元素
a.append(66)
c.append(99)
print(a)
print(c)
print(d)运行结果:
[11, 22, 66]
[[11, 22, 66], [33, 44], 99]
[[11, 22], [33, 44]]解释说明:当a和c列表改变时,d列表并没有改变,这个就是深拷贝,即是递归对每一个元素的拷贝。
注意:对不可变类型的深浅拷贝都是对其的引用,值和id都不会改变