Copia superficial Vs profunda Copiar en Python

Python vs superficial profunda Copia : Aquí, vamos a conocer cuáles son los copia superficial y copia profunda en el lenguaje de programación Python?

En Python, el operador de asignación no copia los objetos, en cambio, crean enlaces entre un objeto y el objetivo. El objeto, si una colección que es mutable o consiste en elementos mutables utiliza la copia de modo que uno puede cambiar una copia sin cambiar la otra.

La copia módulo proporciona genérico poco profundas y las operaciones de copia profundas ,

Shallow Copia

A copia superficial construye un nuevo objeto compuesto y luego inserta referencias en él para los objetos encontrados en el original. Este proceso no es recursivo y por lo tanto no crea copias del objeto secundario. En copia superficial, una referencia de objeto se copia a otro objeto, es decir, los cambios realizados en la copia del objeto reflejará en el objeto original también.

    copy.copy(x)  # returns shallow copy

Ejemplo:

-bash-4.2$ python3
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import copy
>>> xs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> ys = copy.copy(xs)
>>> print(xs)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> print(ys)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> xs.append(['new sublist']) # Modifying the copied list at a "superficial" level was no problem at all.
>>> print(xs)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], ['test']]
>>> print(ys)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> xs[1][0] = 'X1' // changes both 'xs' and 'ys'
>>> print(xs)
[[1, 2, 3], ['X1', 5, 6], [7, 8, 9], ['test']]
>>> print(ys)
[[1, 2, 3], ['X1', 5, 6], [7, 8, 9]]

profundo Copia

A copia profunda construye un nuevo objeto compuesto y luego inserta de forma recursiva las copias en ella los objetos encontrados en el original.

    copy.deepcopy(x) # returns a deep copy

Ejemplo:

-bash-4.2$ python3
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import copy
>>> ys = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> zs = copy.deepcopy(ys)
>>> ys[1][1] = 'X'
>>> print(ys)
[[1, 2, 3], [4, 'X', 6], [7, 8, 9]]
>>> print(zs)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>>

recordatorios importantes

  • copia Shallow de un objeto no clon los objetos secundarios. Por lo tanto, la copia niño no es totalmente independiente de la matriz.
  • Un copia profunda de un objeto de forma recursiva clon del objeto secundario y por lo tanto el objeto secundario es totalmente independiente de la matriz. Creación de una copia profunda es más lento.
  • un objeto arbitrario, incluyendo clases personalizadas, se pueden copiar mediante el módulo de copia.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *