如何在Python中复制对象?

如何在Python中复制对象?

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

浅拷贝

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

copy.copy(x)

返回x的浅拷贝。

深拷贝

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

copy.deepcopy(x[, memo])

返回x的深拷贝。其中,memo是当前复制过程中已复制的对象的字典;

在深拷贝操作中,可能会出现以下问题 −

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

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

然而,deepcopy()方法避免了这些问题。让我们看看如何处理−

  • 保留已在当前复制过程中复制的对象的密件字典

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

安装和导入copy模块

要安装copy模块,使用pip−

pip install copy

在安装后使用copy模块−

import copy

用浅拷贝复制对象

示例

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

import copy

# 创建列表
myList = [[5, 10], [15, 20]]

# 显示列表
print("列表=", myList)

# 浅拷贝
myList2 = copy.copy(myList)

# 显示列表的副本
print("列表的新副本=", myList2)

输出

列表= [[5, 10], [15, 20]]
列表的新副本= [[5, 10], [15, 20]]

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

用深拷贝复制对象

示例

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

import copy

# 创建列表
myList = [[5, 10], [15, 20]]

# 显示列表
print("List = ", myList)

# 深拷贝
myList2 = copy.deepcopy(myList)

# 显示列表的拷贝
print("New copy of the list =", myList2)

输出

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程