logo

copiar en Python (copia profunda y copia superficial)

En Pitón Las declaraciones de asignación no copian objetos, crean enlaces entre un objetivo y un objeto. Cuando usamos el = operador, solo crea una nueva variable que comparte la referencia del objeto original. Para crear copias reales o clones de estos objetos, podemos usar el módulo de copia en Pitón .

Sintaxis de Python Deepcopy

Sintaxis: copiar.copia profunda(x)



Sintaxis de Python Shallowcopy

Sintaxis: copiar.copiar(x)

Ejemplo:

Para realizar estas copias utilizamos el módulo de copia. copy() devuelve una copia superficial de la lista y deepcopy() devuelve una copia profunda de la lista. Como puede ver, ambos tienen el mismo valor pero tienen ID diferentes.

Ejemplo: Este código muestra el uso decopy>módulo para crear copias superficiales y profundas de una lista anidadali1>. Una copia superficial,li2>, se crea usando copy.copy()> , preservando la estructura de nivel superior pero compartiendo referencias a las listas internas. Una copia profunda,li3>, se crea usando copy.deepcopy()> , dando como resultado una copia completamente independiente deli1>, incluidos todos los elementos anidados. El código imprime los ID y valores deli2>yli3>, destacando la distinción entre copias superficiales y profundas en términos de referencia e independencia.



Python3






import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print>(>'li2 ID: '>,>id>(li2),>'Value: '>, li2)> li3>=> copy.deepcopy(li1)> print>(>'li3 ID: '>,>id>(li3),>'Value: '>, li3)>

>

>

Producción:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

¿Qué es la copia profunda en Python?

Una copia profunda crea un nuevo objeto compuesto antes de insertar en él copias de los elementos que se encuentran en el original de forma recursiva. Significa primero construir un nuevo objeto de colección y luego completarlo recursivamente con copias de los objetos secundarios que se encuentran en el original. En el caso de una copia profunda, una copia del objeto se copia en otro objeto. Esto significa que algún cambio hecho a una copia del objeto no se reflejan en el objeto original.

Copia profunda en Python

Ejemplo:

En el ejemplo anterior, el cambio realizado en la lista no afectó otras listas, lo que indica que la lista está profundamente copiada.

Este código ilustra la copia profunda de una lista con elementos anidados usando elcopy>módulo. Inicialmente imprime los elementos originales deli1>, luego los copia en profundidad para crearli2>. Una modificación de un elemento enli2>no afectali1>, como lo demuestran las impresiones separadas. Esto resalta cómo la copia profunda crea una copia independiente, preservando el contenido de la lista original incluso después de cambios en la copia.

nginx

Python3




import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.deepcopy(li1)> print> (>'The original elements before deep copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The new list of elements after deep copying '>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li2[i],end>=>' '>)> print>(>' '>)> print> (>'The original elements after deep copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

>

>

Producción:

The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>

¿Qué es la copia superficial en Python?

Una copia superficial crea un nuevo objeto compuesto y luego hace referencia a los objetos contenidos en el original, lo que significa que construye un nuevo objeto de colección y luego lo completa con referencias a los objetos secundarios que se encuentran en el original. El proceso de copia no se repite y, por lo tanto, no creará copias de los objetos secundarios. En el caso de una copia superficial, una referencia de un objeto se copia en otro objeto. Esto significa que algún cambio hecho a una copia de un objeto reflexionar en el objeto original. En Python, esto se implementa usando el Copiar() función.

Copia superficial en Python

Ejemplo:

En este ejemplo, el cambio realizado en la lista afectó otra lista, lo que indica que la lista se ha copiado superficialmente. Puntos importantes: La diferencia entre copia superficial y profunda solo es relevante para objetos compuestos (objetos que contienen otros objetos, como listas o instancias de clase):

  • Una copia superficial construye un nuevo objeto compuesto y luego (en la medida de lo posible) inserta referencias a los objetos encontrados en el original.
  • Una copia profunda construye un nuevo objeto compuesto y luego, de forma recursiva, inserta copias de los objetos encontrados en el original.

Ejemplo: Este código demuestra la copia superficial de una lista con elementos anidados usando el copy'> módulo. Inicialmente, imprime los elementos originales deli1>, luego realiza una copia superficial enli2>. Modificar un elemento enli2>afecta al elemento correspondiente enli1,>ya que ambas listas comparten referencias a las listas internas. Esto ilustra que la copia superficial crea una nueva lista, pero no proporciona total independencia para los elementos anidados.

Python3




import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print> (>'The original elements before shallow copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The original elements after shallow copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

>

>

tipos de datos sql

Producción:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

ARTÍCULOS RECOMENDADOS Diferencia entre copia superficial y profunda de una clase