Python 复制对象

Vaibhhav Khetarpal 2023年1月30日 2021年7月11日
  1. 在 Python 中使用浅拷贝复制对象
  2. 在 Python 中使用 Deep Copy 复制对象
Python 复制对象

在 Python 中,赋值语句不能复制对象,而只是生成一个新变量,该变量共享对原始对象的引用。

复制在编程中非常有用,主要需要在不损坏另一个副本的情况下编辑一个副本的代码。

本教程将讨论在 Python 中复制对象的不同方法。

在 Python 中使用浅拷贝复制对象

需要导入 copy 模块才能使用浅拷贝操作。copy 模块为程序员提供了使用通用深拷贝和浅拷贝操作的能力。

浅拷贝基本上会创建一个新的收集对象,该对象存储在原始元素中找到的子对象的引用。此过程不是递归的,因此不会创建子对象的任何副本。

当发生浅复制操作时,将引用复制到新对象。这意味着如果对对象的副本进行任何更改,那么这些更改也会反映在原始对象中。

以下代码使用 Shallow copy 操作在 Python 中复制对象。

import copy
  
# the original list
ol = [2, 4, [1,8], 6, 8]
  
# using copy to shallow copy 
nl = copy.copy(ol)
  
print ("Original list before shallow copy")
for x in range(0,len(ol)):
    print (ol[x],end=" ")
  
print("\r")
  
# modfying the new list
nl[2][0] = 9
  
print ("Original list after shallow copy")
for x in range(0,len(ol)):
    print (ol[x],end=" ")

输出:

Original list before shallow copy
2 4 [1, 8] 6 8 
Original list after shallow copy
2 4 [9, 8] 6 8

如前所述,在此操作中不会创建子进程的副本。因此,可以说浅拷贝并不是完全自力更生,而是依赖于原始对象。

在 Python 中使用 Deep Copy 复制对象

我们需要将 copy 模块导入 Python 代码以使用深拷贝和浅拷贝操作。

在深拷贝操作中,拷贝过程总是递归发生的。深度复制操作首先创建一个新的收集对象,然后添加在原始元素中找到的子对象的副本。

基本上,在深度复制过程中,原始对象的副本被传递给新的收集对象。因此,如果对对象的副本进行任何更改,这些更改将不会反映在原始对象中。为了实现这种深度复制操作,我们使用 deepcopy() 函数。

下面的代码使用 deepcopy() 函数在 Python 中实现深度复制操作。

import copy
  
# original list
ol = [2, 4, [1,8], 6, 8]
  
# use deepcopy() to deep copy 
nl = copy.deepcopy(ol)
  
# original elements of list
print ("Original list before deep copying")
for x in range(0,len(ol)):
    print (ol[x],end=" ")
  
print("\r")
  
# adding and element to new list
nl[2][0] = 9
  
# The second list after changes
print ("The new list after modifications ")
for x in range(0,len( ol)):
    print (nl[x],end=" ")
  
print("\r")
  
print ("Original list after deep copying")
for x in range(0,len( ol)):
    print (ol[x],end=" ")

输出:

Original list before deep copying
2 4 [1, 8] 6 8 
The new list after modifications 
2 4 [9, 8] 6 8 
Original list after deep copying
2 4 [1, 8] 6 8 

如上句所述,深拷贝可以递归地克隆子对象,这意味着它是自力更生的,不依赖于原始对象。

创建深拷贝操作的唯一缺点是它比浅拷贝操作相对较慢并且需要更多时间来实现。

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

相关文章 - Python Object