copiar a Python (Copia profunda y Copia superficial)

| | | |

A veces se requiere una copia para que pueda cambiar una copia sin cambiar otra. Python tiene dos formas de hacer copias:

  • Copia profunda
  • Copia superficial

Para hacer estas copias, usamos copiar el módulo . Usamos el módulo copy para operaciones de copia superficial y profunda. Por ejemplo


# import copy module

import copiar


# inicializar lista 1

li1 = [ 1 , 2 , [ 3 < /código> , 5 ], 4 ]


# usar copia para copia superficial

li2 = co py.copy ( li1)


# usando Deepcopy para Deepcopy

li3 < /código> = copy.deepcopy (li1)

En el código anterior, copy () devuelve una copia superficial de la lista, y deepcopy () devuelve una copia profunda de la lista.

deepcopy

Copia profunda — es un proceso en el que el proceso de copia se produce de forma recursiva. Esto significa primero crear un nuevo objeto de colección y luego llenarlo recursivamente con copias de los objetos secundarios que se encuentran en el original. En el caso de una copia profunda, una copia de un objeto se copia en otro objeto. Esto significa que cualquier cambio realizado en la copia del objeto no se reflejará en el objeto original. En python esto se hace usando la función deepcopy () .


# Código de Python para demostrar operaciones de copia


# import & quot; copiar & quot; para operaciones de copia

importar copiar


# inicializando lista 1

li1 = < código clase = "simple"> [ 1 , 2 , [ 3 , 5 ], 4 ]


# usando Deepcopy para realizar una copia profunda

li2 = copy.deepcopy (li1)


# elementos de la lista original

print ( "Los elementos originales antes de la copia profunda" )

for i in rango ( 0 , len (li1)):

print (li1 [i], end < código clase = "palabra clave"> = " " )

print ( " " )


# agregar un elemento a la nueva lista

li2 [ 2 ] [ 0 ] = 7


# El cambio se refleja en l2

print ( "La nueva lista de elementos después de la copia profunda" )

para i en rango ( 0 , < clase de código ="funciones"> len (li1)):

imprimir < clase de código = "simple"> (li2 [i], end = "" )


print ( "" )


# El cambio es NO reflejado en la lista original
# como una copia profunda

imprimir ( "Los elementos originales después de la copia profunda" )

para i en rango ( 0 , len (li1)):

print (li1 [i], end = "" )

Salir:

El elemento original s antes de la copia profunda 1 2 [3, 5] 4 La nueva lista de elementos después de la copia profunda 1 2 [7, 5] 4 Los elementos originales después de la copia profunda 1 2 [3, 5] 4 

En En el ejemplo anterior, un cambio realizado en la lista no afectó a otras listas, lo que indica una lista de copia profunda.

Copia superficial

Copia superficial significa crear un nuevo objeto de colección y luego llenarlo con referencias a objetos secundarios encontrados en el original. El proceso de copia no se repite y, por lo tanto, no crea copias de los propios objetos secundarios. En el caso de una copia superficial, la referencia a un objeto se copia en otro objeto. Esto significa que cualquier cambio realizado en la copia del objeto se reflejará en el objeto original. Python hace esto con la función "copiar () ".


# Código Python para demostrar operaciones de copia


# importar & quot; copiar & quot; para operaciones de copia

importar copiar


# inicializando lista 1

li1 = < código clase = "simple"> [ 1 , 2 , [ 3 , 5 ], 4 ]


# usar copia para copia superficial

li2 = copy.copy (li1)


# elementos de la lista original

print ( " Los elementos originales antes de la copia superficial " )

for i en rango (< /código> 0 , len (li1)):

print (li1 [i], end = "" )


imprimir ( "" )


# agregar un elemento a la nueva lista

li2 [ 2 ] [ 0 ] = 7


# verificar si el cambio se refleja

print ( "Los elementos originales después de una copia superficial" )

for < clase de código = "simple"> i en rango ( 0 , len (li1 )):

print (li1 [i], end = " " )

Salir:

Los elementos originales antes de la copia superficial 1 2 [3, 5] 4 Los elementos originales después de una copia superficial 1 2 [7, 5] 4 

En el ejemplo anterior, el cambio realizado en la lista es surtió efecto en otra lista, lo que indica que la lista se copió.

Puntos importantes:
La diferencia entre copias superficiales y profundas solo se aplica a objetos compuestos (objetos que contienen otros objetos, como listas o instancias de clases):

  • La copia superficial crea un nuevo objeto compuesto y luego (en la medida de lo posible) inserta referencias a objetos que se encuentran en el original.
  • Una copia profunda crea un nuevo objeto compuesto y luego inserta recursivamente copias de los objetos encontrados en el original en él.