[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