Python 的深浅拷贝

79 阅读1分钟

Python 的深浅拷贝

在 Python 中,深拷贝和浅拷贝是用来复制对象的两种不同方式。它们的区别在于是否复制了对象的所有嵌套对象。具体来说:

  1. 浅拷贝(Shallow Copy)

    • 浅拷贝会创建一个新的对象,该对象中的元素是原始对象中元素的引用。
    • 对于不可变对象(如数字、字符串等),浅拷贝会产生独立的对象。但对于可变对象(如列表、字典等),新对象中的元素仍然是原始对象中元素的引用。
    • 浅拷贝可以通过 copy() 方法来实现。
  2. 深拷贝(Deep Copy)

    • 深拷贝会创建一个全新的对象,并且递归地复制原始对象中的所有嵌套对象,直到没有嵌套对象为止。
    • 无论原始对象中有多少层嵌套,深拷贝都会创建一个独立的副本。
    • 深拷贝可以通过 copy.deepcopy() 方法来实现。

下面是一个简单的示例来说明两者之间的区别:

import copy

# 原始对象
original_list = [[1, 2, 3], [4, 5, 6]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改原始对象
original_list[0][0] = 100

print("Original list:", original_list)
print("Shallow copy:", shallow_copy)
print("Deep copy:", deep_copy)

输出结果将会是:

Original list: [[100, 2, 3], [4, 5, 6]]
Shallow copy: [[100, 2, 3], [4, 5, 6]]
Deep copy: [[1, 2, 3], [4, 5, 6]]

可以看到,修改原始对象后,浅拷贝也受到了影响,而深拷贝则保持了独立性。