J'ai un petit souci que je n'arrive pas à comprendre.
J'ai un premier dictionnaire et je veux "copier" ce dictionnaire pour le modifier par la suite. Mais voilà, après ma modification sur mon second dictionnaire, mon dictionnaire d'origine est également modifié. Il y a probablement quelque chose qui m'échappe ou que je ne fait pas bien, si vous pouviez m'éclairer...
Bon, évidemment il a fallut que je poste mon problème pour trouver la solution même pas 5 min derrière. J'imagine qu'écrire son problème permet parfois de le rendre plus clair .
D'après ce que j'ai compris, la copie doit être explicite, sinon les 2 variables renvoient au même objet derrière.
Du coup il suffit de faire
dictionnaire_b = dict(dictionnaire_a)
C'était pas bien compliqué...
Désolé pour le post inutile du coup
- Edité par AlexandreLaTruite 2 décembre 2015 à 20:43:37
C'est tout à fait normal, tu fais une copie simple, pas une copie profonde
Ici c'est comme si dico_a était un objet, et dico_b une référence à un seul et même objet.
Pour faire une copie profonde qui n'agira pas sur le second dico, tu as plusieurs choix :
tout copier d'un dico à l'autre dans une boucle for (avec dico_a.items() pour obtenir le couple clé - valeur), ou bien utiliser deepcopy (fonction) de copy (module)
J'en dis pas plus, je te laisse chercher (c'est tellement plus constructif d'avoir des pistes et de chercher tout seul, on apprend mieux ^^)
Ici c'est comme si dico_a était un objet, et dico_b une référence à cet objet.
Non, c'est comme si dico_a et dico_b étaient deux étiquettes/références vers un même objet. Il n'y en a pas un qui est un "vrai" objet et l'autre une référence vers le premier.
Ici c'est comme si dico_a était un objet, et dico_b une référence à cet objet.
Non, c'est comme si dico_a et dico_b étaient deux étiquettes/références vers un même objet. Il n'y en a pas un qui est un "vrai" objet et l'autre une référence vers le premier.
Effectivement oui, j'ai pas fais gaffe (je confond avec le C je pense)
Jevanni a écrit:
Yaalval a écrit:
ou bien utiliser deepcopy (fonction) de copy (module)
Dans son cas précis, même pas besoin de faire une deepcopy du dictionnaire, étant qu'il s'agit de strings.
C'est juste pour donner une solution "générale"
Je corrige
dictionnaire a = dictionnaire b
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique