Chciałbym zainicjować słownik zestawów (w Pythonie 2.6) używając dict.fromkeys
, ale wynikowa struktura zachowuje się dziwnie. Dokładniej:Niechciane zachowanie z 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])}
I oczywiście nie chcę, aby dodać 3 do wszystkich zbiorów, tylko do zestawu, który odpowiada x[5]
. Oczywiście mogę uniknąć problemu, inicjując x
bez , ale chciałbym zrozumieć, czego tu brakuje.
Wszystkie są takie same. Zestawy, listy, słowniki i wszelkie inne obiekty są typami odniesienia, a po przypisaniu ich do innej zmiennej kopiowane jest tylko odwołanie, a nie rzeczywisty obiekt. 'odkeys' musi użyć przypisania, aby powiązać zestaw z każdym kluczem, ale jak widzisz, to nie kopiuje zestawu. Nie jestem pewien, jak sobie z tym poradzić, pomijając tworzenie słownika w inny sposób. –