Python浅拷贝和深拷贝



在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中的相应元素没有发生改变,因为深拷贝复制了所有的子对象,所以list1list3是完全独立的。