código fuente: Lib/copy.py
las instrucciones de asignación en Python no copian objetos, crean enlaces entre un destino y un objeto. Para las colecciones que son elementos mutables o que contienen elementos mutables, a veces se necesita una copia para que se pueda cambiar una copia sin cambiar la otra. Este módulo proporciona operaciones genéricas de copia superficial y profunda (explicadas a continuación).
la Interfaz de resumen:
copy.
copy
(x)¶
Devolver una copia superficial de x.,
copy.
deepcopy
(x)¶
Devolver una copia en profundidad de x.
copy.
error
¶
Planteadas para el módulo con errores específicos.
la diferencia entre la copia superficial y profunda solo es relevante para compoundobjects (objetos que contienen otros objetos, como listas o instancias de clase):
-
una copia superficial construye un nuevo objeto compuesto y luego (hasta el punto posible) inserta referencias a los objetos encontrados en el original.,
-
una copia profunda construye un nuevo objeto compuesto y luego, recursivamente, inserta copias de los objetos encontrados en el original.
a menudo existen dos problemas con operaciones de copia profunda que no existen con operaciones de copia superficial:
-
Los Objetos recursivos (objetos compuestos que, directa o indirectamente, contienen una referencia a sí mismos) pueden causar un bucle recursivo.
-
porque deep copy copia todo lo que puede copiar demasiado, como los datos que se pretende compartir entre copias.,
la función deepcopy()
evita estos problemas al:
-
mantener un
memo
diccionario de objetos ya copiados durante el paso de copia actual; y -
dejar que las clases definidas por el usuario anulen la operación de copia o el conjunto de componentes copiado.
Este módulo no copia tipos como módulo, método, seguimiento de pila, marco de pila,archivo, socket, ventana, matriz o cualquier tipo similar., Hace «copiar» funciones y clases (poco profundas y profundas), devolviendo el objeto original sin cambios; esto es compatible con la forma en que estos son tratados por el módulo pickle
.
Las Clases pueden usar las mismas interfaces para controlar la copia que usan para controlar el picking. Consulte la descripción del módulo pickle
para obtener información sobre estos métodos. De hecho, el módulo copy
utiliza las funciones registeredpickle del módulo copyreg
.,
para que una clase defina su propia implementación de copia, puede definir métodos especiales __copy__()
y __deepcopy__()
. Se llama al primero para implementar la operación de copia superficial; no se pasan argumentos adicionales.Este último se llama para implementar la operación de copia profunda; se pasa oneargument, el diccionario memo
., Si la implementación __deepcopy__()
necesita hacer una copia profunda de un componente, debe llamar a la función deepcopy()
con el componente como primer argumento y el diccionario memo como segundo argumento.
vea también
Module pickle
discusión de los métodos especiales utilizados para apoyar la recuperación y restauración del estado del objeto.
Deja una respuesta