首页 > 知识问答 > 浅复制和深复制的区别
浅复制和深复制的区别
浅复制和深复制是Python中复制对象的两种方式,它们的区别主要在于是否创建了一个新的对象,而不仅仅是复制原始对象的引用。
1、浅复制:浅复制只复制了对象的靠前层引用,也就是说,如果原对象中的元素是可变类型(如列表、字典等),那么浅复制后的新对象和原对象会共享这些可变类型的子对象,这意味着,如果我们修改了新对象中的任何一个可变类型元素,原对象中对应的元素也会被修改,浅复制使用的是copy模块中的copy()函数。
2、深复制:深复制则会递归地复制原对象的所有层次,包括靠前层引用的对象,这样,新对象和原对象就不再共享任何可变类型的子对象,这意味着,即使我们修改了新对象中的任何一个可变类型元素,原对象中对应的元素也不会被修改,深复制使用的是copy模块中的deepcopy()函数。
以下是一个简单的例子来说明浅复制和深复制的区别:
import copy原始列表original_list = [1, 2, [3, 4]]浅复制shallow_copy = copy.copy(original_list)shallow_copy[2][0] = 'a' # 修改浅复制后的子列表的靠前个元素print("Original list after shallow copy modification:", original_list) # 输出:[1, 2, ['a', 4]]print("Shallow copy:", shallow_copy) # 输出:[1, 2, ['a', 4]]深复制deep_copy = copy.deepcopy(original_list)deep_copy[2][0] = 'b' # 修改深复制后的子列表的靠前个元素print("Original list after deep copy modification:", original_list) # 输出:[1, 2, ['a', 4]]print("Deep copy:", deep_copy) # 输出:[1, 2, ['b', 4]]从上面的例子可以看出,浅复制后的对象在被修改时,原对象也会受到影响;而深复制后的对象在被修改时,原对象则不会受到影响,在需要保持数据独立性的情况下,我们应该使用深复制。