在Python中正常赋值 浅复制 深复制的区别


在Python中正常赋值 浅复制 深复制的区别

浅复制和深复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)相关:

  • 浅拷贝构造一个新的复合对象,然后(尽可能)将对它的引用插入到原始对象中。

  • 深层复制构造一个新的复合对象,然后递归地将复制插入原始对象中的对象。

实例

这是一个小小的示范:

import copy

a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]

使用正常分配操作进行复制:

d = c

print id(c) == id(d)          # True - d is the same object as c
print id(c[0]) == id(d[0])    # True - d[0] is the same object as c[0]

使用浅拷贝:

d = copy.copy(c)

print id(c) == id(d)          # False - d is now a new object
print id(c[0]) == id(d[0])    # True - d[0] is the same object as c[0]

使用深层复制:

d = copy.deepcopy(c)

print id(c) == id(d)          # False - d is now a new object
print id(c[0]) == id(d[0])    # False - d[0] is now a new object