2015-12-22 41 views
0

我有一本名爲wantedPoints的字典。
使用該行的字典執行深度複製:深拷貝字典更改順序

copyWantedPoints = deepcopy(wantedPoints) 

結果我得到的是這樣的:

wantedPoints

{'AB12': [], 'GPS1': [], 'GPS3': [], 'BS3': [], 'AB41': [], 'C3': [], 'AB43': [], 'AB42': [], 'AB45': [], 'AB44': [], 'AB47': [], 'AB46': [], 'AB49': [], 'AB48': [], 'C2': [], 'C5': []} 

copyWantedPoints

{'AB12': [], 'GPS1': [], 'GPS3': [], 'BS3': [], 'AB41': [], 'AB49': [], 'AB43': [], 'AB42': [], 'AB45': [], 'AB44': [], 'AB47': [], 'AB46': [], 'C3': [], 'AB48': [], 'C2': [], 'C5': []} 

,你可以看,一切都保持不變除了兩個鍵,C3AB49在詞典中改變了他們的位置。
任何想法爲什麼會發生?

+2

類型的字典是無序的 –

+0

我知道他們是無序的,但你說,複製的字典初始化它改變它再次命令後?因此,將字典複製N次會導致N個不同的按鍵順序? – Elia

+1

我在說你正在創建一個新的字典,所以它可以以任何順序進來,它可以是相同的或完全不同的。 –

回答

1

字典是沒有順序的容器,這就是爲什麼,如果你想要一個有序Continer看看在OrderedDict

插入順序使用類型的字典不放心,deepcopy只是循環和所有的值複製到新字典,所以鍵的「順序」可以通過實現而變得不同。請注意,deepcopy並不像C++字節拷貝那樣拷貝它,它只是將所有的鍵和所有的值(拷貝它們)並放在一起。

看看這個post如何Python字典例子實施

+0

由於我複製了一本字典(它必須是按某種東西排序的,而不是隨機的),它不是應該以相同的順序排列,因爲我沒有改變任何東西?否則爲什麼只有兩點改變了他們的鍵位? – Elia

+0

@Ellia,字典沒有針對有序行爲實施,並且他們沒有跟蹤廣告訂單(或任何類型的訂單)。此外,順序不是隨機的,而是您所建議的,它處理密鑰的哈希。 – Netwave