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.
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a