在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是关于复制对象的两个不同概念。
浅拷贝(Shallow Copy):
- 浅拷贝创建一个新对象,然后将原始对象的元素(如列表、字典等)复制到新对象中。但是,如果原始对象的元素本身是可变的(例如,列表中包含了其他列表),则浅拷贝只复制对这些元素的引用,而不是元素本身。
- 在Python中,可以使用
copy
模块的copy()
函数来进行浅拷贝。
示例:
import copy original_list = [1, [2, 3], 4] shallow_copy = copy.copy(original_list) # 修改原始对象的可变元素 original_list[1][0] = 'X' print(original_list) # [1, ['X', 3], 4] print(shallow_copy) # [1, ['X', 3], 4],注意这里也被修改了
深拷贝(Deep Copy):
- 深拷贝创建一个新对象,并递归地将原始对象的所有元素复制到新对象中。这包括原始对象的嵌套元素,无论它们是否可变。
- 在Python中,可以使用
copy
模块的deepcopy()
函数来进行深拷贝。
示例:
import copy original_list = [1, [2, 3], 4] deep_copy = copy.deepcopy(original_list) # 修改原始对象的可变元素 original_list[1][0] = 'X' print(original_list) # [1, ['X', 3], 4] print(deep_copy) # [1, [2, 3], 4],注意这里没有被修改
总结区别:
- 浅拷贝只复制原始对象的顶层元素,而深拷贝递归地复制所有嵌套的元素。
- 对于不可变对象(如数字、字符串等),深拷贝和浅拷贝没有太大差异。
- 对于可变对象,深拷贝会生成一个完全独立的副本,而浅拷贝则共享内部元素的引用。