在Python中,浅拷贝和深拷贝是用来复制对象的概念,但它们之间存在一些重要的区别。
浅拷贝:创建一个新对象,然后将原始对象的元素复制到新对象中。然而,如果原始对象是复合对象(例如列表或类实例),则复制的是对象的引用而不是对象本身。这意味着对新对象所做的更改可能会反映到原始对象中,反之亦然。在Python中,你可以使用copy
模块的copy()
函数来进行浅拷贝。
例如:
import copy
list1 = [[1, 2, 3], [4, 5, 6]]
list2 = copy.copy(list1)
list2[0][0] = 'a'
print(list1) # 输出:[['a', 2, 3], [4, 5, 6]]
print(list2) # 输出:[['a', 2, 3], [4, 5, 6]]
在这个例子中,我们改变了list2
中的一个元素,但list1
中的相应元素也发生了改变,因为浅拷贝只复制了最外层的列表,而列表中的子列表仍然是原始对象的引用。
深拷贝:创建一个新对象,并递归地复制原始对象的所有元素。这意味着即使原始对象是复合对象,也会复制所有的子对象。对新对象所做的更改不会反映到原始对象中。在Python中,你可以使用copy
模块的deepcopy()
函数来进行深拷贝。
例如:
import copy
list1 = [[1, 2, 3], [4, 5, 6]]
list3 = copy.deepcopy(list1)
list3[0][0] = 'a'
print(list1) # 输出:[[1, 2, 3], [4, 5, 6]]
print(list3) # 输出:[['a', 2, 3], [4, 5, 6]]
在这个例子中,我们改变了list3
中的一个元素,但list1
中的相应元素没有发生改变,因为深拷贝复制了所有的子对象,所以list1
和list3
是完全独立的。