Sobes.tech
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.