Objeto de copia de Python

Vaibhhav Khetarpal 18 julio 2021
  1. Utilice una copia superficial para copiar un objeto en Python
  2. Use Deep Copy para copiar un objeto en Python
Objeto de copia de Python

En Python, las declaraciones de asignación no tienen el poder de copiar objetos, solo generan una nueva variable que comparte la referencia a la del objeto original.

Copiar es muy útil en programación y se requiere principalmente para editar el código de una copia sin dañar la otra.

Este tutorial discutirá diferentes métodos para copiar un objeto en Python.

Utilice una copia superficial para copiar un objeto en Python

El módulo copy debe importarse para utilizar la operación de copia superficial. El módulo de copy proporciona a los programadores la capacidad de utilizar operaciones genéricas de copia profunda y superficial.

Una copia superficial básicamente crea un nuevo objeto de recopilación que almacena las referencias de los objetos secundarios que se encuentran en los elementos originales. Este proceso no es recursivo y, por lo tanto, no crea ninguna copia de los objetos secundarios.

Cuando se produce una operación de copia superficial, se copia una referencia al nuevo objeto. Significa que si se realiza algún cambio en la copia del objeto, estos cambios también se reflejarán en el objeto original.

El siguiente código utiliza la operación Copia superficial para copiar un objeto en 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=" ")

Producción :

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

Como se mencionó anteriormente, no se crean copias del proceso hijo en esta operación. Por lo tanto, se puede decir que la copia superficial no es completamente autosuficiente y depende del objeto original.

Use Deep Copy para copiar un objeto en Python

Necesitamos importar el módulo copy al código Python para usar las operaciones de copia tanto profunda como superficial.

En la operación de copia profunda, el proceso de copia siempre ocurre de forma recursiva. La operación de copia profunda primero crea un nuevo objeto de recolección y luego agrega copias de los objetos secundarios que se encuentran en los elementos originales.

Básicamente, en el proceso de copia profunda, se pasa una copia del objeto original al nuevo objeto de recopilación. Por lo tanto, si se realiza algún cambio en la copia del objeto, estos cambios no se reflejarán en el objeto original. Para implementar esta operación de copia profunda, usamos la función deepcopy().

El siguiente código usa la función deepcopy() para implementar la operación de copia profunda en 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=" ")

Producción :

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 

Como se dicta en las oraciones anteriores, una copia profunda puede clonar los objetos secundarios de forma recursiva, lo que significa que es autosuficiente y no depende del objeto original.

El único inconveniente de crear una operación de copia profunda es que es comparativamente más lento y lleva más tiempo lograrlo que una operación de copia superficial.

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

Artículo relacionado - Python Object