python深拷贝和浅拷贝的区别

682 阅读1分钟

对于不可变类型对象,深拷贝和浅拷贝的地址值和原对象相同,不会开辟新的内存空间。

a = (1,2,3)
b = copy.copy(a)
c = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(c))

4552886240
4552886240
4552886240

对于可变类型对象,深拷贝和浅拷贝的地址值和原对象不同,都会开辟新的内存空间

a = [1,2,3]
b = copy.copy(a)
c = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(c))

4307401992
4307400776
4307632584

那么深拷贝和浅拷贝的区别在哪里呢?对于多层嵌套类型的对象:

a1 = [4,5]
a = [1,2,3,a1]
b = copy.copy(a)
c = copy.deepcopy(a)
a1.append(6)
print(a)
print(b)
print(c)
print(id(a))
print(id(b))
print(id(c))

[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5]]
4386818632
4387046024
4387046088