深拷贝和浅拷贝是两种不同的对象复制方式,它们在处理对象及其子对象时有着显著的区别。
浅拷贝(Shallow Copy)是指创建一个新对象,但新对象中包含的是对原始对象中各个子对象的引用,而不是子对象本身。这意味着新对象和原始对象将引用相同的内存地址,因此,对其中一个对象的修改将影响到另一个对象。简而言之,浅拷贝只复制了对象的引用,并没有真正复制对象本身。在Python中,如果你使用赋值操作来复制一个对象,或者使用了copy
模块的copy()
函数,那么实际上进行的就是浅拷贝。
深拷贝(Deep Copy)则不同,它是指创建一个新对象,并且递归地复制原始对象及其所有嵌套对象。这样,新对象和原始对象是完全独立的,修改一个对象不会影响到另一个对象。在深拷贝中,新对象会拥有自己独立的内存地址,其内部的所有子对象也都是全新复制的,而不是对原始子对象的引用。在Python中,copy
模块的deepcopy()
函数就是用来实现深拷贝的。
因此,深拷贝和浅拷贝的主要区别在于它们处理对象内部引用的方式不同。浅拷贝只是复制了对象的引用,而深拷贝则真正复制了对象及其所有子对象。这导致了它们在修改一个对象时,对另一个对象的影响不同。在进行对象复制时,应根据具体的需求和对象的结构来选择使用深拷贝还是浅拷贝
import copy
# 原始列表,包含一个嵌套列表
original_list = [1, 2, [3, 4]]
# 使用copy()函数进行浅拷贝
shallow_copy = copy.copy(original_list)
# 使用deepcopy()函数进行深拷贝
deep_copy = copy.deepcopy(original_list)
# 修改浅拷贝的嵌套列表
shallow_copy[2][0] = 5
print("原始列表:", original_list) # 输出会受到浅拷贝修改的影响
print("浅拷贝列表:", shallow_copy)
# 修改深拷贝的嵌套列表
deep_copy[2][0] = 6
print("原始列表:", original_list) # 输出不会受到深拷贝修改的影响
print("深拷贝列表:", deep_copy)