谈谈Python中对象拷贝

谈谈Python中对象拷贝

在Python中,对象拷贝可以分为浅拷贝和深拷贝两种方式。


浅拷贝


浅拷贝是指创建一个新的对象,该对象与原始对象共享一部分内存空间,因此对于原始对象中的可变对象,浅拷贝后的对象和原始对象会共享这些可变对象的引用,即修改其中一个对象的可变对象会影响到另一个对象。

在Python中,可以使用 copy() 函数进行浅拷贝:

import copy


a = [1, 2, [3, 4]]

b = copy.copy(a)

b[2][0] = 5

print(a)  # 输出 [1, 2, [5, 4]]

print(b)  # 输出 [1, 2, [5, 4]]


在上面的示例代码中,我们使用 copy() 函数对列表 a 进行了浅拷贝,并修改了拷贝后的列表 b 中的第三个元素的第一个元素。结果显示,修改后的 b 列表和原始的 a 列表都发生了改变。


深拷贝


深拷贝是指创建一个新的对象,该对象与原始对象完全独立,不共享任何内存空间,因此对于原始对象中的可变对象,深拷贝后的对象和原始对象不会共享这些可变对象的引用,即修改其中一个对象的可变对象不会影响到另一个对象。

在Python中,可以使用 deepcopy() 函数进行深拷贝:

import copy


a = [1, 2, [3, 4]]

b = copy.deepcopy(a)

b[2][0] = 5

print(a)  # 输出 [1, 2, [3, 4]]

print(b)  # 输出 [1, 2, [5, 4]]


在上面的示例代码中,我们使用 deepcopy() 函数对列表 a 进行了深拷贝,并修改了拷贝后的列表 b 中的第三个元素的第一个元素。结果显示,修改后的 b 列表发生了改变,而原始的 a 列表没有发生改变。

需要注意的是,深拷贝的效率比浅拷贝低,因为它需要对原始对象进行完全的复制。因此,在进行对象拷贝时,应根据实际需求选择适当的拷贝方式。