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

不言
Libérer: 2018-05-04 14:13:53
original
2528 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

À 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
Copier après la connexion

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)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal