在Python中,深拷贝和浅拷贝是两种不同的对象复制方式:
浅拷贝
概念:浅拷贝创建一个新的对象,但新对象中的元素仍然指向原始对象中的元素引用。
特点:
对于不可变对象(如字符串、元组),浅拷贝和深拷贝效果相同,因为不可变对象的内容无法被修改。
对于可变对象(如列表、字典),浅拷贝会导致新对象和原始对象共享某些子对象,因此对新对象的修改可能会影响原始对象。
示例:
import copy
original_list = [1, 2, [3, 4]]
shallow_copied_list = copy.copy(original_list)
original_list = 'a'
print(original_list) 输出: [1, 2, ['a', 4]]
print(shallow_copied_list) 输出: [1, 2, ['a', 4]]
深拷贝
概念:深拷贝创建一个新的对象,并递归地复制原始对象中的所有元素及其子元素,新对象和原始对象完全独立。
特点:
对于任何对象,深拷贝都会创建一个全新的对象,包括所有子对象,因此对新对象的修改不会影响原始对象。
示例:
import copy
original_list = [1, 2, [3, 4]]
deep_copied_list = copy.deepcopy(original_list)
original_list = 'a'
print(original_list) 输出: [1, 2, ['a', 4]]
print(deep_copied_list) 输出: [1, 2, [3, 4]]
总结来说,浅拷贝只复制了对象的引用,而深拷贝复制了对象及其所有子对象。在处理包含可变子对象的数据结构时,深拷贝是更安全的选项,因为它避免了原始对象和新对象之间的潜在冲突。