Maison  >  Article  >  développement back-end  >  Une brève discussion sur le changement de valeur après l'ajout du dictionnaire à la liste en python

Une brève discussion sur le changement de valeur après l'ajout du dictionnaire à la liste en python

不言
不言original
2018-05-04 14:13:532480parcourir

Cet article présente principalement une brève discussion sur le changement de valeur après l'ajout d'un dictionnaire à la liste en Python. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

<.> Regardez un exemple

d={&#39;test&#39;:1}
d_test=d
d_test[&#39;test&#39;]=2
print d

Si vous le pratiquez sur la ligne de commande, vous constaterez que ce que vous avez modifié est d_test, mais d a également changé.

Souvent, ce n’est pas ce à quoi nous nous attendons.

Pourquoi ?

Parce que le dictionnaire d est un objet, et d_test=d ne crée pas réellement à nouveau le dictionnaire en mémoire. Il pointe simplement vers le même objet. C'est également une considération pour Python pour améliorer les performances et optimiser la mémoire.

La scène réelle

d={"name":""}
l=[]
for i in xrange(5):
  d["name"]=i
  l.append(d)
print l

Le résultat après la boucle peut ne pas être le même que ce que vous souhaitez.

Même s'il est ajouté à la liste, ce qui est stocké dans la liste est toujours un objet, ou l'adresse du dictionnaire. plutôt que l’espace de stockage réel en mémoire.

Utilisez la méthode .copy(). Un nouveau dictionnaire indépendant peut être créé

d={"name":""}
l=[]
for i in xrange(5):
  test=d.copy()
  test["name"]=i
  l.append(test)
print l

Mise à jour :

a={&#39;q&#39;:1,&#39;w&#39;:[]}
b=a.copy()
b[&#39;q&#39;]=2
b[&#39;w&#39;].append(123)
print a
print b

À ce stade, on constate que la valeur de 'q' dans a ne changera pas, mais la valeur dans la liste change toujours

Parce que la copie est une copie superficielle

Mais il y a une piste ici

a={&#39;q&#39;:1,&#39;w&#39;:[]}
b=a.copy()
b[&#39;q&#39;]=2
b[&#39;w&#39;]=[123]
print a
print b

Si vous l'attribuez directement, la structure dans a ne sera pas modifié (principalement la relation entre la méthode d'ajout)

Copie détaillée

import copy
a={&#39;q&#39;:1,&#39;w&#39;:[]}
b=copy.deepcopy(a)

Recommandations associées :

Python crée une liste vide et explique comment utiliser append


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn