Copiare un dizionario con copy in Python

I dizionari in Python sono strutture dati versatili e potenti che consentono di memorizzare dati in coppie chiave-valore. Essi sono particolarmente utili per rappresentare dati complessi in modo organizzato. Tuttavia, quando si lavora con dizionari, spesso sorge la necessità di creare una copia di un dizionario esistente. Questo può essere necessario per varie ragioni, come la necessità di modificare i dati senza alterare il dizionario originale. 

Python offre un metodo semplice e diretto per copiare dizionari: il metodo copy(). Questa guida esplorerà come utilizzare copy() per creare copie di dizionari in Python, fornendo esempi pratici e considerazioni importanti.

Il metodo copy dei dizionari in Python

Il metodo copy() è una funzione incorporata nei dizionari Python che crea una copia superficiale del dizionario. Una copia superficiale significa che viene creato un nuovo dizionario contenente le stesse coppie chiave-valore dell'originale, ma qualsiasi modifica apportata alle coppie chiave-valore nel dizionario copiato non influenzerà il dizionario originale, e viceversa.

La sintassi per utilizzare il metodo copy() è la seguente:

dizionario_copiato = dizionario_originale.copy()

Dopo aver eseguito questo comando, dizionario_copiato conterrà tutte le coppie chiave-valore presenti in dizionario_originale al momento della copia.

Esempi pratici di utilizzo del metodo copy

Supponiamo di avere il seguente dizionario che memorizza informazioni su un libro:

libro = {
	"titolo": "Il nome della rosa",
	"autore": "Umberto Eco",
	"anno": 1980
}

# Creazione di una copia del dizionario
libro_copiato = libro.copy()

print(libro_copiato)

Il dizionario libro_copiato conterrà ora una copia esatta di libro al momento della copia.

Per dimostrare che le modifiche al dizionario copiato non influenzano l'originale:

# Aggiunta di un nuovo elemento al dizionario copiato
libro_copiato["pagine"] = 512

print("Originale:", libro)
print("Copiato:", libro_copiato)

Questo codice aggiunge una nuova coppia chiave-valore al libro_copiato. Come si può vedere dall'output, il dizionario originale libro rimane inalterato, confermando che la copia è indipendente dall'originale.

Copie superficiali vs copie profonde

È importante notare che il metodo copy() crea una copia superficiale del dizionario. Ciò significa che se il dizionario originale contiene oggetti mutabili come liste, le modifiche a questi oggetti all'interno del dizionario copiato si rifletteranno anche nell'originale, e viceversa. Per creare una copia completamente indipendente di un dizionario che contiene oggetti mutabili, è necessario utilizzare la funzione deepcopy() dal modulo copy:

from copy import deepcopy

# Esempio di dizionario con oggetti mutabili
libro = {
	"titolo": "Il nome della rosa",
	"autore": "Umberto Eco",
	"anno": 1980,
	"capitoli": ["Introduzione", "Capitolo 1", "Capitolo 2"]
}

libro_copiato = deepcopy(libro)

# Modifica dell'oggetto mutabile nella copia
libro_copiato["capitoli"].append("Conclusione")

In questo esempio, deepcopy() viene utilizzato per creare una copia completamente indipendente di libro_dettagliato, inclusi gli oggetti mutabili contenuti al suo interno.

Conclusioni

Il metodo copy() offre un modo semplice ed efficace per creare copie superficiali di dizionari in Python, permettendo agli sviluppatori di lavorare con dati duplicati senza influenzare l'originale. Tuttavia, è cruciale comprendere la distinzione tra copie superficiali e profonde, specialmente quando si lavora con dizionari che contengono oggetti mutabili.

Indice pagine Python: