如何在 Python 中复制对象?


在 Python 中,如果你想复制对象,赋值运算符将无法满足目的。它在目标和对象之间创建绑定,即它永远不会创建新的对象。它只创建一个新的变量,共享原始对象的引用。为了解决这个问题,提供了 copy 模块。此模块具有通用的浅拷贝和深拷贝操作。

浅拷贝

浅拷贝构造一个新的复合对象,然后将对原始对象中找到的对象的引用插入到其中。它使用以下方法复制对象  

copy.copy(x)
Return a shallow copy of x.

深拷贝

深拷贝构造一个新的复合对象,然后递归地将原始对象中找到的对象的副本插入到其中。它使用以下方法复制对象  

copy.deepcopy(x[, memo])

Return a deep copy of x. Here, memo is a dictionary of objects already copied during the current copying pass;

使用深拷贝操作,可能会发生以下问题:

  • 递归可能会导致递归循环。

  • 由于深拷贝复制所有内容,因此它可能会复制太多内容,例如打算在副本之间共享的数据。

但是,deepcopy() 方法避免了这些问题。让我们看看如何:

  • 保留已在当前复制过程中复制的对象的备忘录字典

  • 允许用户定义的类覆盖复制操作或复制的组件集。

安装并导入 copy 模块

要安装 copy 模块,请使用 pip:

pip install copy

安装后要使用 copy 模块:

import copy

使用浅拷贝复制对象

示例

我们将使用浅拷贝来复制对象。它创建一个新对象,存储原始元素的引用。让我们看一个例子  

import copy # Create a List myList = [[5, 10], [15, 20]] # Display the list print("List = ", myList) # Shallow Copy myList2 = copy.copy(myList) # Display the copy of the List print("New copy of the list =", myList2)

输出

List =  [[5, 10], [15, 20]]
New copy of the list = [[5, 10], [15, 20]]

在上面的示例中,我们使用 copy() 方法对列表进行了浅拷贝。

使用深拷贝复制对象

示例

我们将使用 deepcopy() 方法对对象进行深拷贝。深拷贝也会创建一个新对象。让我们看一个例子  

import copy # Create a List myList = [[5, 10], [15, 20]] # Display the list print("List = ", myList) # Deep Copy myList2 = copy.deepcopy(myList) # Display the copy of the List print("New copy of the list =", myList2)

输出

List = [[5, 10], [15, 20]]
New copy of the list = [[5, 10], [15, 20]]

更新于: 2022-09-15

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告