En Python 2.6 et 3.2, le comportement de dict.fromkeys avec des objets mutables peut être surprenant. Lorsqu'une liste est utilisée comme valeur, la modification d'une entrée dans le dictionnaire affecte toutes les autres entrées, comme démontré ci-dessous :
>>> xs = dict.fromkeys(range(2), []) >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: [1]}
Cependant, ce comportement ne se produit pas avec les compréhensions de dict de Python 3.2 :
>>> xs = {i:[] for i in range(2)} >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: []}
La raison apparente du comportement de fromkeys est que chaque entrée du dictionnaire résultant fait référence au même objet. La modification de l'objet via une entrée affecte toutes les autres. Cela peut être clarifié en créant le dictionnaire manuellement :
>>> a = [] >>> xs = dict.fromkeys(range(2), a)
Cela démontre que les entrées du dictionnaire font toutes référence au même objet :
>>> xs[0] is a and xs[1] is a True
Pour éviter ce comportement, utilisez des compréhensions de dict ou, si vous utilisez Python 2.6 ou une version antérieure, utilisez dict avec une expression génératrice :
xs = dict((i, []) for i in range(2))
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!