[Python] Confronto dizionari.

Gabriele Battaglia iz4apu a libero.it
Mar 2 Feb 2021 12:13:28 CET


Reply to the Federico Fissore's message, wrote on 02/02/2021 at 11:44:
Ciao Federico, interessante la tua risposta, ti chiedo un chiarimento.

> Gabriele Battaglia wrote on 02/02/21 11:28:
>> Che cosa mi sfugge? d.copy non dovrebbe creare un dizionario nuovo, 
>> svincolato dai riferimenti alle variabili, l, contenuti nell'origine, d?
>>
> 
> `dict.copy` fa una "shallow copy", cioè crea un nuovo dizionario e ci 
> mette dentro chiavi e valori dell'originale, senza copiarle
Ma allora che differenza c'è fra c=d e c=d.copy()
Se, come dici, ci mette dentro tutto ciò che contiene l'origine senza 
modificarli... allora è una semplice assegnazione come quella 
dell'operatore "=", giusto?

> 
> il riferimento alla lista ['io', 20] è quindi condiviso da entrambe le 
> "copie": un cambiamento fatto su un dizionario si riflette sui contenuti 
> di quello copiato
Esatto, e questo avviene sia dopo c=d che dopo c=d.copy()

> 
> se vuoi proprio copiare, usa deepcopy [0]

L'ho fatto e funziona! Però, cosa significa [0]?


> ti consiglio però di usare un approccio diverso: la tua funzione prende 
> il dizionario in input e torna True/False a seconda che l'abbia 
> modificato o meno
> 
Sì, ci avevo pensato ma ho ritenuto più economico agire in questo modo, 
cioè fare una copia prima per poi confrontarla con quella ritornata 
dalla funzione.
Questo mi risparmia di scrivere un bel po di codice perchè la funzione 
che agisce su d è lunga e complessa, con una marea di condizioni 
annidate e per ciascuna avrei dovuto dire..."se succede questo allora 
flagga True il tosave.... così per tante tante volte fino alla fine 
della funzione dove potevo poi restituirlo con return.
Invece l'idea del confronto di d entrante e uscente mi sembrava veloce.
C'è qualche motivo, di carattere generale... per cui non si dovrebbe fare?
Chiedo per imparare. :)

Ciao.


Gabry.


Maggiori informazioni sulla lista Python