Python 的深浅拷贝
在 Python 中,深拷贝和浅拷贝是用来复制对象的两种不同方式。它们的区别在于是否复制了对象的所有嵌套对象。具体来说:
-
浅拷贝(Shallow Copy) :
- 浅拷贝会创建一个新的对象,该对象中的元素是原始对象中元素的引用。
- 对于不可变对象(如数字、字符串等),浅拷贝会产生独立的对象。但对于可变对象(如列表、字典等),新对象中的元素仍然是原始对象中元素的引用。
- 浅拷贝可以通过
copy()方法来实现。
-
深拷贝(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]]
可以看到,修改原始对象后,浅拷贝也受到了影响,而深拷贝则保持了独立性。