Pourquoi « fromkeys » avec des objets mutables crée-t-il des valeurs partagées dans les dictionnaires Python ?

Patricia Arquette
Libérer: 2024-10-26 11:05:29
original
345 Les gens l'ont consulté

 Why Does `fromkeys` with Mutable Objects Create Shared Values in Python Dictionaries?

Création de dictionnaire avec fromkeys et objets mutables : une tournure surprenante

La méthode fromkeys en Python est un moyen pratique de créer un dictionnaire à partir d'un séquence de clés, toutes mappées à une valeur spécifiée. Cependant, lors de l'utilisation d'objets mutables comme valeur, un comportement inattendu peut se produire.

The Curiosity

Considérez l'exemple suivant dans Python 2.6 et 3.2 :

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
print(xs)</code>
Copier après la connexion

À notre grande surprise, la modification de la liste associée à la première clé ([0]) affecte également la liste associée à la deuxième clé ([1]). Cela peut être déroutant puisque nous nous attendons à ce que chaque clé ait sa propre valeur indépendante.

La Révélation

La raison de ce comportement particulier réside dans le fait que la méthode fromkeys crée un nouveau dictionnaire avec des références au même objet mutable, plutôt que de créer des copies distinctes. En d'autres termes, toutes les entrées du dictionnaire pointent vers le même objet mutable sous-jacent.

La solution

Pour éviter ce problème, nous pouvons utiliser des compréhensions de dict, qui créent un nouveau liste pour chaque clé de dictionnaire :

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
print(xs)</code>
Copier après la connexion

Dans Python 2.6 et versions antérieures, nous pouvons obtenir un comportement similaire en utilisant dict() avec une expression génératrice :

<code class="python">xs = dict((i, []) for i in range(2))</code>
Copier après la connexion

Cette méthode alternative crée également des listes distinctes pour chaque clé de dictionnaire.

Conclusion

Comprendre les nuances de la création de dictionnaire avec des objets mutables est essentiel pour éviter un comportement inattendu et maintenir l'intégrité des données dans le code Python. En choisissant la méthode appropriée, nous pouvons garantir que les entrées du dictionnaire sont correctement isolées et éviter les effets secondaires indésirables.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal