Coldwings Coldwings Python 話題的優秀回答者 如果按照語言規范來看,Python的規范里沒有說明Dict是一個有序的類型。換句話說,dict就是無序的,因為語言規范不保證它按照什么順序出來。要有序,請使用OrderedDict。 但是無序不是說每次輸出結果都不同,無序只是指結果不保證一定與插入順序一致而已。 CPython 3.6里對dict有個新的實現,使得字典內部存儲的順序不僅僅與key有關,還與插入順序有關。
但是有關並不代表它就一定按照插入順序依次出現(似乎當字典實現在內存中進行擴展的時候就可能造成結果不一致),
只不過表示如果key相同,插入順序相同,那么結果也是相同的。 在此之前,用values和keys方法取到的list僅與key(准確的說是key的__hash__)有關而與插入順序無關。
字典是無序的,這句話是對的。但是字典的存儲過程卻是按順序的。字典的存儲背后的邏輯是散列表,也就是稀疏數組。
-> dict初始化之后,Python解釋器會給dict分配一定的空間,往字典里添加是按順序添加的。
-> 但是,如果如果繼續往字典里添加新鍵,有可能會引起Python解釋器對存儲空間的擴容,擴容的過程會新建散列表,
-> 然后復制已有的元素到新散列表,這個過程可能會引起散列沖突,導致dict的鍵值對的次序發生變化。
-> 《流暢的Python》一書有關於字典的存儲更為詳細的介紹。如果不了解散列表,可以查資料。
作者:陳子坤 鏈接:https://www.zhihu.com/question/65855807/answer/261889672 來源:知乎 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處
指導鏈接:https://www.zhihu.com/question/65855807
以上兩個答案我覺的應該解釋的比較正確。