Junior — Middle
Qual è la differenza tra copia profonda e superficiale di oggetti in Python, e quando dovrebbe essere usata?
sobes.tech AI
Risposta dell'AI
In Python, la copiatura superficiale (shallow copy) crea un nuovo oggetto, ma gli oggetti annidati al suo interno non vengono copiati, vengono semplicemente referenziati. La copiatura profonda (deep copy) crea un nuovo oggetto e copia ricorsivamente tutti gli oggetti annidati, creando una struttura completamente indipendente.
Quando usarla:
- La copiatura superficiale è adatta se gli oggetti annidati non cambieranno o se le modifiche agli oggetti annidati devono riflettersi in entrambe le copie.
- La copiatura profonda è necessaria quando si richiede una copia completamente indipendente dell’oggetto con tutti gli elementi annidati, in modo che le modifiche alla copia non influenzino l’originale.
Esempio:
import copy
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
shallow[0][0] = 100
print(original) # [[100, 2], [3, 4]] - l’originale è cambiato
deep[1][1] = 200
print(original) # [[100, 2], [3, 4]] - l’originale non è cambiato
Quindi, la scelta tra copia superficiale e profonda dipende dai requisiti di indipendenza della copia.