Copia oggetto Python

Vaibhhav Khetarpal 18 luglio 2021
  1. Usa Shallow Copy per copiare un oggetto in Python
  2. Usa Deep Copy per copiare un oggetto in Python
Copia oggetto Python

In Python, le istruzioni di assegnazione non hanno il potere di copiare oggetti ma si limitano a generare una nuova variabile che condivide il riferimento a quello dell’oggetto originale.

La copia è molto utile nella programmazione ed è principalmente necessaria per modificare il codice di una copia senza danneggiare l’altra.

Questo tutorial discuterà diversi metodi per copiare un oggetto in Python.

Usa Shallow Copy per copiare un oggetto in Python

Il modulo copy deve essere importato per utilizzare l’operazione di copia superficiale. Il modulo copy fornisce ai programmatori la possibilità di utilizzare operazioni generiche di copia profonda e superficiale.

Una copia superficiale crea fondamentalmente un nuovo oggetto di raccolta che memorizza i riferimenti degli oggetti figlio trovati negli elementi originali. Questo processo non è ricorsivo e, pertanto, non crea alcuna copia degli oggetti figlio.

Quando si verifica un’operazione di copia superficiale, un riferimento viene copiato nel nuovo oggetto. Significa che se vengono apportate modifiche alla copia dell’oggetto, queste modifiche si rifletteranno anche nell’oggetto originale.

Il codice seguente utilizza l’operazione Shallow copy per copiare un oggetto in Python.

import copy

# the original list
ol = [2, 4, [1, 8], 6, 8]

# using copy to shallow copy
nl = copy.copy(ol)

print("Original list before shallow copy")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

print("\r")

# modfying the new list
nl[2][0] = 9

print("Original list after shallow copy")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

Produzione:

Original list before shallow copy
2 4 [1, 8] 6 8 
Original list after shallow copy
2 4 [9, 8] 6 8

Come accennato in precedenza, in questa operazione non vengono create copie del processo figlio. Pertanto, si può dire che la copia superficiale non è completamente autosufficiente e dipende dall’oggetto originale.

Usa Deep Copy per copiare un oggetto in Python

Dobbiamo importare il modulo copy nel codice Python per utilizzare sia le operazioni di copia profonda che superficiale.

Nell’operazione di copia completa, il processo di copia si verifica sempre in modo ricorsivo. L’operazione di copia completa crea prima un nuovo oggetto di raccolta e quindi aggiunge copie degli oggetti figlio trovati negli elementi originali.

Fondamentalmente, nel processo di copia profonda, una copia dell’oggetto originale viene passata al nuovo oggetto di raccolta. Pertanto, se vengono apportate modifiche alla copia dell’oggetto, queste modifiche non si rifletteranno nell’oggetto originale. Per implementare questa operazione di copia profonda, utilizziamo la funzione deepcopy().

Il codice seguente usa la funzione deepcopy() per implementare l’operazione di copia profonda in Python.

import copy

# original list
ol = [2, 4, [1, 8], 6, 8]

# use deepcopy() to deep copy
nl = copy.deepcopy(ol)

# original elements of list
print("Original list before deep copying")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

print("\r")

# adding and element to new list
nl[2][0] = 9

# The second list after changes
print("The new list after modifications ")
for x in range(0, len(ol)):
    print(nl[x], end=" ")

print("\r")

print("Original list after deep copying")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

Produzione:

Original list before deep copying
2 4 [1, 8] 6 8 
The new list after modifications 
2 4 [9, 8] 6 8 
Original list after deep copying
2 4 [1, 8] 6 8 

Come dettato nelle frasi precedenti, una copia profonda può clonare ricorsivamente gli oggetti figlio, il che significa che è autosufficiente e non dipende dall’oggetto originale.

L’unico svantaggio della creazione di un’operazione di copia profonda è che è relativamente più lenta e richiede più tempo rispetto a un’operazione di copia superficiale.

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

Articolo correlato - Python Object