Копировать объект Python

Vaibhhav Khetarpal 30 Январь 2023 11 Июль 2021
  1. Используйте Shallow Copy для копирования объекта в Python
  2. Используйте Deep Copy для копирования объекта в Python
Копировать объект Python

В Python операторы присваивания не могут копировать объекты, а просто создают новую переменную, которая имеет ссылку на исходный объект.

Копирование очень полезно в программировании и в основном требуется для редактирования кода одной копии без повреждения другой.

В этом руководстве будут рассмотрены различные методы копирования объекта в Python.

Используйте Shallow Copy для копирования объекта в Python

Для использования операции неглубокого копирования необходимо импортировать модуль copy. Модуль 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

Как упоминалось ранее, в этой операции не создаются копии дочернего процесса. Следовательно, можно сказать, что неглубокая копия не полностью самодостаточна и зависит от исходного объекта.

Используйте Deep Copy для копирования объекта в Python

Нам нужно импортировать модуль 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