J'ai trouvé cette étrange propriété lorsqu'on envisage une liste de dictionnaires. Considérons les éléments suivants:
my_list=[{}]*3
my_list[0]['a']=1
print my_list
3 Réponses :
Lorsque vous créez Alors, évitez de le faire lorsque vous souhaitez modifier des valeurs spécifiques. P>
Vous pouvez essayer comme ceci: p>
my_list = [{}] * 3 code> La même référence a été prise dans n code> nombre de fois. p>
my_list = [{} pour i in gamme (3)] code> p>
Il sera également instructif d'évaluer [id (d) pour D dans my_list] code> et comparer les deux cas.
list=[{}]*3
When you are doing this you are creating the same object 3 times with the same reference. So if you change one all will be changed. In python, it is not required to declare the size of your dictionary. Just declare an empty dictionary.
Oui, cela peut sembler un peu étrange au début, mais vous devez comprendre comment les dictionnaires sont traités dans Python.
Dans la première ligne: Vous créez 3 copies de Que se passe-t-il ici: p> Comment travailler cela: p> sortie: p> {} code> et stockez-le dans une liste. p>
{} code> li>
TY! Pourquoi fonctionne-t-il seulement comme celui-ci pour les dictionnaires? Par exemple, si je fais a = 5 code> et my_list = [A] * 3 code>, alors my_list [0] = 2 code> ne changera que le premier élément.
@ 3SM1R des opérations complètement différentes. Dans le cas de la question, vous militatez l'objet à quel my_list [0] code> (c'est-à-dire le dictionnaire). Dans votre nouvel exemple, vous devez réaffecter my_list [0] code> pour pointer sur un objet différent (et dans tous les cas, l'objet existant auquel cela pointe, l'entier 5 code> est immuable ).
N'appelez pas votre variable
list code>