我想用dict.fromkeys
初始化集合的字典(在Python 2.6中),但生成的結構行爲奇怪。更具體地講:來自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])}
我顯然不希望增加3到所有套,只相當於x[5]
設定。當然,我可以通過初始化x
而不用fromkeys
來避免這個問題,但我想了解我在這裏錯過了什麼。
它們都是一樣的。集合,列表,字典和任何其他對象都是引用類型,當您將它們分配給另一個變量時,只複製引用,而不是實際對象。 'fromkeys'必須使用賦值將該組與每個鍵相關聯,但正如您所看到的,這不會複製該組。我不知道如何解決這個問題,除了以不同的方式創建字典。 – 2010-06-08 19:19:20