Maison  >  Article  >  développement back-end  >  Pourquoi « fromkeys » avec des objets mutables crée-t-il des valeurs partagées dans les dictionnaires Python ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 11:05:29258parcourir

 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>

À 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>

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>

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!

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