In Pitone , Le istruzioni di assegnazione non copiano oggetti, creano collegamenti tra una destinazione e un oggetto. Quando usiamo il = operatore, crea solo una nuova variabile che condivide il riferimento dell'oggetto originale. Per creare vere e proprie copie o cloni di questi oggetti, possiamo utilizzare il modulo copy in Pitone .
Sintassi di Python Deepcopy
Sintassi: copia.deepcopy(x)
Sintassi di Python Shallowcopy
Sintassi: copia.copia(x)
Esempio:
Per realizzare queste copie utilizziamo il modulo di copia. copy() restituisce una copia superficiale dell'elenco e deepcopy() restituisce una copia approfondita dell'elenco. Come puoi vedere, entrambi hanno lo stesso valore ma hanno ID diversi.
Esempio: Questo codice mostra l'utilizzo dicopy>
modulo per creare copie superficiali e profonde di un elenco nidificatoli1>
. Una copia superficiale,li2>
, viene creato utilizzando copy.copy()>
, preservando la struttura di primo livello ma condividendo i riferimenti alle liste interne. Una copia profonda,li3>
, viene creato utilizzando copy.deepcopy()>
, risultando in una copia completamente indipendente dili1>
, inclusi tutti gli elementi nidificati. Il codice stampa gli ID e i valori dili2>
Eli3>
, evidenziando la distinzione tra copie superficiali e profonde in termini di riferimento e indipendenza.
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)> |
>
>
Produzione:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Cos'è la copia profonda in Python?
Una copia profonda crea un nuovo oggetto composto prima di inserirvi in modo ricorsivo copie degli elementi trovati nell'originale. Significa prima costruire un nuovo oggetto di raccolta e poi popolarlo ricorsivamente con copie degli oggetti figlio trovati nell'originale. Nel caso della copia profonda, una copia dell'oggetto viene copiata in un altro oggetto. Significa che eventuali modifiche fatto su una copia dell'oggetto non si riflettono nell'oggetto originale.

Esempio:
Nell'esempio sopra, la modifica apportata all'elenco non ha influito altri elenchi, indicando che l'elenco è stato copiato in profondità.
Questo codice illustra la copia approfondita di un elenco con elementi nidificati utilizzando il metodocopy>
modulo. Inizialmente stampa gli elementi originali dili1>
, quindi copiali in profondità per creareli2>
. Una modifica a un elemento inli2>
non influisceli1>
, come dimostrato dalle stampe separate. Ciò evidenzia come la copia approfondita crei una copia indipendente, preservando il contenuto dell'elenco originale anche dopo le modifiche alla copia.
funzione sottostringa Java
Python3
caratteristiche di una serie di panda
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> => ' '> )> |
>
>
Produzione:
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>
Cos'è la copia superficiale in Python?
Una copia superficiale crea un nuovo oggetto composto e quindi fa riferimento agli oggetti contenuti nell'originale al suo interno, il che significa che costruisce un nuovo oggetto raccolta e quindi lo popola con riferimenti agli oggetti figlio trovati nell'originale. Il processo di copia non è ricorrente e pertanto non creerà copie degli oggetti figlio stessi. Nel caso della copia superficiale, un riferimento di un oggetto viene copiato in un altro oggetto. Significa che eventuali modifiche fatto su una copia di un oggetto riflettete nell'oggetto originale. In Python, questo viene implementato utilizzando il file copia() funzione.

Esempio:
In questo esempio, la modifica apportata all'elenco ha influito un altro elenco, indicando che l'elenco è stato copiato superficialmente. Punti importanti: La differenza tra copia superficiale e profonda è rilevante solo per oggetti composti (oggetti che contengono altri oggetti, come elenchi o istanze di classi):
- Una copia superficiale costruisce un nuovo oggetto composto e poi (per quanto possibile) inserisce in esso riferimenti agli oggetti trovati nell'originale.
- Una copia profonda costruisce un nuovo oggetto composto e poi, ricorsivamente, inserisce al suo interno copie degli oggetti trovati nell'originale.
Esempio: Questo codice dimostra la copia superficiale di un elenco con elementi nidificati utilizzando il metodo ' copy'>
modulo. Inizialmente, stampa gli elementi originali dili1>
, quindi esegue una copia superficiale inli2>
. Modificare un elemento inli2>
influenza l'elemento corrispondente inli1,>
poiché entrambi gli elenchi condividono riferimenti agli elenchi interni. Ciò dimostra che la copia superficiale crea un nuovo elenco, ma non fornisce la completa indipendenza per gli elementi nidificati.
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> => ' '> )> |
>
>
Produzione:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
ARTICOLI CONSIGLIATI – Differenza tra copia superficiale e profonda di una classe