Este módulo proporciona operaciones de copia (superficial o profunda) genéricas
Resumen de la interfaz:
import copy x = copy.copy(y) # hacer una copia superficial de y x = copy.deepcopy(y) # hacer una copia profunda de y
La diferencia entre la copia superficial y profunda sólo es relevante para los objetos compuestos (objetos que contienen otros objetos, como las listas e instancias de clase):
Hay dos problemas comunes en las operaciones de copia profunda que no se dan en las operaciones de copia superficial:
La función deepcopy() evita estos problemas:
Esta versión no copia tipos como módulos, clases, funciones, métodos, trazas de pila, marcos de pila, ficheros, zócalos, ventanas, matrices o tipos similares.
Las clases pueden utilizar las mismas interfaces para controlar la copia que las que utilizan para controlar el estibado: Pueden definir métodos llamados __getinitargs__(), __getstate__() y __setstate__(). Consultar la descripciíon del módulo pickle para obtener informaciín sobre estos métodos. El módulo copy no usa el módulo de registro copy_reg.
Para que una clase defina su propia implementación de la copia, puede definir los métodos especiales __copy__() y __deepcopy__(). El primero se utiliza para implementar la operación de copia superficial, sin argumentos adicionales. El segundo se usa para implementar la operación de copia profunda. Recibe un argumento, el diccionario descrito anteriormente. Si la implementación de __deepcopy__() necesita hacer una copia profunda de un componente, debería llamar a la función deepcopy() con el componente como primer argumento y el diccionario como segundo argumento.
Más informació en: