Ich möchte ein Wörterbuch von Sätzen initialisieren (in Python 2.6) mit dict.fromkeys
, aber die resultierende Struktur verhält sich seltsam. Genauer gesagt:Unerwünschte Verhalten von dict.fromkeys
>>>> x = {}.fromkeys(range(10), set([]))
>>>> x
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>>> x[5].add(3)
>>>> x
{0: set([3]), 1: set([3]), 2: set([3]), 3: set([3]), 4: set([3]), 5: set([3]), 6: set([3]), 7: set([3]), 8: set([3]), 9: set([3])}
Ich möchte natürlich nicht 3 bis alle Sätze zu dem Satz, nur hinzufügen, die zu x[5]
entspricht. Natürlich kann ich das Problem vermeiden, indem ich x
ohne fromkeys
initialisiere, aber ich möchte verstehen, was ich hier vermisse.
Sie sind alle gleich gesetzt. Sätze, Listen, Wörterbücher und andere Objekte sind Referenztypen, und wenn Sie sie einer anderen Variablen zuweisen, wird nur die Referenz kopiert, nicht das eigentliche Objekt. 'fromkeys' müssen eine Zuordnung verwenden, um den Satz mit jedem Schlüssel zu verbinden, aber wie Sie sehen, kopiert dies den Satz nicht. Ich bin mir nicht sicher, wie ich das umgehen soll, abgesehen davon, dass ich das Wörterbuch auf andere Weise erstellt habe. –