在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制对象的两种不同方式。
浅拷贝是创建一个新的对象,该对象具有与原始对象相同的内容。但是,如果原始对象包含其他对象(如列表、字典等),浅拷贝仅复制对象的引用,而不是创建新的对象。这意味着修改原始对象中的嵌套对象将会影响到浅拷贝的对象。
深拷贝是创建一个全新的对象,其中包含原始对象及其所有嵌套对象的副本。换句话说,深拷贝不仅复制了原始对象的值,还复制了原始对象的所有嵌套对象。这意味着修改原始对象或其嵌套对象不会影响到深拷贝的对象。
下面是一个示例代码来说明这两者的区别:
import copy
# 原始对象
original_list = [1, 2, [3, 4]]
# 浅拷贝
shallow_copy = copy.copy(original_list)
# 修改原始对象中的嵌套列表
original_list[2][0] = 5
print(original_list) # 输出 [1, 2, [5, 4]]
print(shallow_copy) # 输出 [1, 2, [5, 4]]
# 深拷贝
deep_copy = copy.deepcopy(original_list)
# 修改原始对象中的嵌套列表
original_list[2][1] = 6
print(original_list) # 输出 [1, 2, [5, 6]]
print(deep_copy) # 输出 [1, 2, [5, 4]]
在这个例子中,我们首先创建了一个原始对象original_list
,其中包含一个嵌套列表。然后我们使用copy.copy()
进行浅拷贝,并使用copy.deepcopy()
进行深拷贝。我们修改了原始对象中的嵌套列表,然后分别打印了原始对象、浅拷贝对象和深拷贝对象。可以看到,浅拷贝对象的嵌套列表也被修改了,而深拷贝对象的嵌套列表保持不变。