Python 中的浅拷贝和深拷贝17 Mar 2025 | 5 分钟阅读 在本教程中,我们将学习如何使用 Python 脚本创建浅拷贝和深拷贝。通常,我们使用 =(赋值运算符)来创建 Python 对象的副本。让我们理解与在 Python 中创建副本相关的完整概念。 Python 中的拷贝众所周知,赋值运算符用于创建 Python 对象的副本,但事实并非如此;它仅在目标和对象之间创建绑定。当我们使用赋值运算符时,它不会创建新对象,而是创建一个共享旧对象引用的新变量。 当我们希望在不修改原始对象的同时进行更改时,副本会很有帮助。用户还倾向于创建副本以处理可变对象。 让我们理解下面的例子。 示例 - 输出 Old List: [[1, 2, 3], [4, 5, 4], [7, 8, 'a']] ID of Old List: 1909447368968 New List: [[1, 2, 3], [4, 5, 4], [7, 8, 'a']] ID of New List: 1909447368968 解释 - 在上面的输出中,我们可以看到变量 list1 和 list2 共享相同的 id 1909447368968。 如果我们更改 list1 或 list2 中的任何值,更改将同时反映在两者中。 Python 中的拷贝类型主要目的是创建 Python 对象的副本,我们可以修改副本而不更改原始数据。在 Python 中,有两种创建副本的方法。
我们将使用 copy 模块来创建上述副本。 copy 模块copy 模块用于创建浅拷贝和深拷贝。让我们看看每种方法。 浅拷贝浅拷贝是对象的副本,它存储原始元素的引用。它创建一个新的集合对象,然后用原始对象中找到的子对象的引用填充它。 它复制嵌套对象的引用,但不创建嵌套对象的副本。因此,如果我们对对象副本进行任何更改,更改将反映在原始对象中。我们将使用 copy() 函数来实现它。 示例 - 输出 The original elements before shallow copying 1 7 [3, 5] 8 The original elements after shallow copying 1 7 [10, 5] 8 在上面的代码中,我们更改了 list1,该更改反映在另一个列表中。 示例 - 2 输出 Old list: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]] New list: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] 解释 - 在上面的代码中,我们创建了 list1 的浅拷贝。新创建的 list2 包含存储在 list1 中的原始嵌套对象的引用。然后我们将 [13, 14, 15] 追加到旧列表中,而子列表未复制到新列表中。 Python 中的深拷贝深拷贝是一个过程,我们在其中创建一个新对象并递归地添加复制的元素。我们将使用 copy 模块中的 deecopy() 方法。将创建原始对象及其所有对象的独立副本。让我们通过以下示例进行理解。 示例 - 输出 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 解释 - 在上面的输出中,我们可以看到 z 是我们使用 deecopy() 方法创建的 x 的克隆。如果我们更改其中一个子对象,它不会影响原始对象。 在深拷贝中,两个对象完全独立。列表 x 被递归地克隆,包括其所有子对象。 示例 - 2 输出 The original list: 0 [1, 2] [3, 5] 4 The new list after deep copying: 0 [8, 2] [3, 5] 4 The original elements: 0 [1, 2] [3, 5] 4 复制任意 Python 对象我们还可以使用 copy 方法复制任意 Python 对象,包括自定义类。可以使用 copy.copy() 和 copy.deepcopy() 方法来复制任何对象。 让我们理解下面的例子。 示例 - 输出 Func_new(50, 56) Func_new(50, 56) False False 解释 - 在上面的代码中,我们创建了一个名为 Func_new 的用户定义类,并定义了 __repr__() 来检查对象。接下来,我们使用 copy 模块创建了浅拷贝。我们实例化了该类并检查了原始对象及其浅拷贝。 注意事项复合对象是浅拷贝和深拷贝之间的主要区别。包含其他对象的对象,例如列表或类实例,称为列表或类实例。
下一主题Atom Python |
(使用 BeautifulSoup 进行数据抓取) Web 抓取是从网站提取数据的一种方式。它有助于我们收集或复制特定数据,我们可以将数据存储到数据库或电子表格中以供以后分析或检索。Python 附带 BeautifulSoup……
7 分钟阅读
?在图像的不同维度上训练机器学习模型需要将图像转换为 NumPy 数组。通常,转换是隐式发生的;但是,有多种方法可以显式执行相同的操作。它可用于执行复杂的...
阅读 10 分钟
在计算机科学或工程术语中,计算机可理解的语言与我们日常生活中使用的语言(如英语、中文、法语、印地语等)完全不同。那么,问题来了,计算机如何理解并以语言输出...
11 分钟阅读
在 Python 中,head() 函数通常用于从列表或 DataFrame 中检索前 n 个项目。列表的 head() 函数 在 Python 中,您可以将 head() 函数与列表一起使用以检索列表中的前 n 个项目。head() 函数不是...
阅读 3 分钟
Python 算法是任何技术爱好者、软件工程师或数据科学家的最重要工具。我们在 Python 中编写的算法不是语言特定的,它们没有标准的规则来解释它们应该如何精确地编写。现在这意味着...
5 分钟阅读
在本教程中,我们将学习 Python 如何管理内存或 Python 如何在内部处理我们的日期。我们将深入探讨此主题,以了解 Python 的内部工作原理以及它如何处理内存。本教程将深入了解 Python 内存...
阅读 12 分钟
Playfair 密码是一种多字母替换密码,由查尔斯·惠斯通爵士于 1854 年发明。它使用 5x5 的字母网格(通常称为密钥方块)进行加密和解密。密钥方块由一个关键字构建,其中关键字...
阅读 6 分钟
简介 Python 是一种多功能的高级编程语言,广泛用于许多应用程序,包括桌面应用程序。它的简单性、易用性以及大量的库和框架使其成为开发桌面应用程序的诱人选择。然而,有如此多的可用选项,它可能是...
5 分钟阅读
在本教程中,我们将研究 Python 内置库,用于计算 python 程序的执行季节。Python 中的这样一个库提供了一种称为 timeit() 方法的策略。timeit 模块将多次执行程序(在 Python 中)...
阅读 10 分钟
这并非真正随机,而是用于生成伪随机值。这意味着这些随机值是可以预测的。在某些情况下,random() 方法会生成数字。此数量也称为种子值。语法 random.seed(i, version ) 参数:i:任何值,它是...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India