3.18 copy -- Operazioni di copia superficiale e profonda

Questo modulo fornisce operazioni di copia generiche (superficiale e profonda).

Sommario interfaccia:

import copy

x = copy.copy(y)        # crea una copia superficiale di y
x = copy.deepcopy(y)    # crea una copia profonda di y
Per errori specifici del modulo, viene sollevata l'eccezione copy.error.

La differenza tra copia superficiale e profonda è rilevante solo per oggetti composti (oggetti che contengono altri oggetti, come liste o istanze di classe):

Con la copia profonda, possono spesso presentarsi due problemi che non si verificano con le operazioni di copia superficiale:

La funzione deepcopy() evita questi problemi attraverso le seguenti modalità:

Questa versione non copia tipi come moduli, classi, funzioni, metodi, tracce dello stack, frame dello stack, file, socket, finestre, array o altri tipi simili.

Le classi possono usare la stessa interfaccia per controllare la copia che viene usata per il controllo di serializzazione. Vedete la descrizione del modulo pickle per informazioni su questi metodi. Il modulo copy non usa il modulo di registrazione copy_reg.

Nel caso di una classe che definisca la propria implementazione di copia, si possono utilizzare i metodi speciali __copy__() e __deepcopy__(). Il primo viene chiamato per implementare l'operazione di copia superficiale. Il secondo viene chiamato per implementare l'operazione di copia profonda; viene passato un argomento, il dizionario memo. Se l'implementazione di __deepcopy__() ha necessità di fare una copia profonda di un componente, dovrebbe chiamare la funzione deepcopy() con il componente come primo argomento e il dizionario memo come secondo argomento.

Vedete anche:

Modulo pickle:
Discussione dei metodi speciali usati per supportare il recupero e ripristino dello stato degli oggetti.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.