软件测试|Python的深拷贝和浅拷贝是什么?-LMLPHP

简介

深拷贝和浅拷贝是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中复制对象的两种不同方式。浅拷贝创建一个新对象,但共享嵌套对象的引用,而深拷贝创建一个完全独立的副本,包括嵌套对象。根据我们的不同需求,我们可以选择使用其中一种方式来复制对象。深拷贝通常用于确保对象的完全独立性,而浅拷贝通常用于创建共享数据的副本。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

软件测试|Python的深拷贝和浅拷贝是什么?-LMLPHP

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

软件测试|Python的深拷贝和浅拷贝是什么?-LMLPHP

01-18 03:57