浅拷贝和深拷贝

发布时间 2023-11-14 15:15:50作者: Mio21

浅拷贝和深拷贝

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在编程中用来复制数据结构的两个概念。它们在复制数据时的行为和效果有所不同:

浅拷贝(Shallow Copy)

浅拷贝创建了一个新的数据结构,该数据结构的内容与原始数据结构相同。然而,对于数据结构中包含的对象(如列表、字典、类实例等),浅拷贝只复制了对这些对象的引用,而不复制对象本身。这意味着原始数据结构和浅拷贝后的数据结构会共享相同的子对象。如果你修改了浅拷贝后的数据结构中的子对象,那么原始数据结构中的相应子对象也会受到影响。

在Python中,可以使用标准库模块中的copy模块来执行浅拷贝,例如使用copy.copy()函数。

深拷贝(Deep Copy)

深拷贝创建了一个新的数据结构,该数据结构的内容与原始数据结构相同,包括所有的子对象。换句话说,深拷贝会递归地复制原始数据结构中的所有对象,以便原始数据结构和深拷贝后的数据结构是完全独立的,互不影响。

在Python中,可以使用标准库模块中的copy模块来执行深拷贝,例如使用copy.deepcopy()函数。

以下是一个示例,演示了浅拷贝和深拷贝的区别:

import copy

# 原始数据结构
original_list = [1, [2, 3], [4, 5]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改浅拷贝中的子对象
shallow_copy[1][0] = 999

# 修改深拷贝中的子对象
deep_copy[1][0] = 888

# 原始数据结构不受影响
print(original_list)   # [1, [999, 3], [4, 5]]

在上述示例中,浅拷贝只复制了对原始数据结构中的子列表的引用,所以修改浅拷贝中的子列表也会影响原始数据结构。而深拷贝复制了整个子列表,因此修改深拷贝中的子列表不会影响原始数据结构。