简介
深拷贝和浅拷贝是Python中常用的概念,用于复制对象,但它们在复制对象时的方式和用途有所不同。在本文中,我们将详细讨论深拷贝和浅拷贝的概念,以及如何在Python中使用它们。
什么是深拷贝和浅拷贝?
- 浅拷贝
浅拷贝是指创建一个新对象,该对象是原始对象的副本。然而,如果原始对象包含其他对象(例如列表或字典),浅拷贝将只复制这些对象的引用,而不是递归地复制它们的内容。这意味着浅拷贝后的对象与原始对象之间共享一些内部对象。
- 深拷贝
深拷贝是创建一个新对象,该对象是原始对象及其所有嵌套对象的完全独立副本。这意味着深拷贝后的对象是原始对象的递归复制,没有共享引用。深拷贝通常用于需要完全独立的副本,以防止在一个对象上的更改影响到另一个对象。
如何进行浅拷贝
在Python中,可以使用标准库模块 copy
中的 copy
函数来执行浅拷贝。下面是一个示例:
import copy
original_list = [1, 2, [3, 4]]
shallow_copy = copy.copy(original_list)
shallow_copy[2].append(5)
print("Original List:", original_list)
print("Shallow Copy:", shallow_copy)
-----------
# 输出结果如下:
Original List: [1, 2, [3, 4, 5]]
Shallow Copy: [1, 2, [3, 4, 5]]
可以看到,浅拷贝后的 shallow_copy
对象与原始列表 original_list
共享内部列表的引用,因此在 shallow_copy
中对内部列表的更改也反映在原始列表中。
如何进行深拷贝
为了执行深拷贝,我们可以使用 copy
模块中的 deepcopy
函数。这将创建一个完全独立的副本,包括嵌套对象。以下是一个深拷贝的示例:
import copy
original_list = [1, 2, [3, 4]]
deep_copy = copy.deepcopy(original_list)
deep_copy[2].append(5)
print("Original List:", original_list)
print("Deep Copy:", deep_copy)
-----------
输出结果如下:
Original List: [1, 2, [3, 4]]
Deep Copy: [1, 2, [3, 4, 5]]
在这个例子中,深拷贝创建了一个与原始对象完全独立的副本,因此对 deep_copy
中的更改不会影响原始对象。
总结
浅拷贝和深拷贝是Python中复制对象的两种不同方式。浅拷贝创建一个新对象,但共享嵌套对象的引用,而深拷贝创建一个完全独立的副本,包括嵌套对象。根据我们的不同需求,我们可以选择使用其中一种方式来复制对象。深拷贝通常用于确保对象的完全独立性,而浅拷贝通常用于创建共享数据的副本。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!