字典即雜湊表,由空間換取時間得到取數o(1)的速度。
對於雜湊表有乙個很好的比喻就是櫃子,每乙個物件通過計算獲取乙個hash值,hash值就像是櫃子的編號(字典的key),用以迅速的查詢櫃子裡所儲存的東西(字典的value)。如果櫃子裡有多個東西(hash值不唯一),根據具體演算法的實現方式有不同的處理方式,如鍊表(遍歷櫃子裡的東西),內部再建乙個雜湊表,使用開放位址等。
在早期的python中,是通過對hash值取餘找value的,而它的開放定址以及動態改變陣列長度(當數量超過當前陣列長度的一定比例時,陣列就會擴容)
每往字典裡存入乙個鍵值,就會構建乙個1*3的陣列,分別為雜湊值,指標a,與指標b
比如dct[「a」]=「b」,記憶體即為
『』』[[…,…,…]
[…,…,…]
[14124124123123,指向"a"的指標,指向b的指標]]
『』』讀取時根據餘數取對應位置的陣列
python自帶開放定址(餘數相同時,python為了不覆蓋之前已有的值,就會使用開放定址技術重新尋找乙個新的位置存放這個新的鍵值對)以及動態擴容
那麼python3.6之後的有序字典是怎麼樣的呢?
my_dict['name'] = 'kingname'
'''# 記憶體示意圖
indices = [none, 0, none, none, none, none, none, none]
entries = [[-5954193068542476671, 指向name的指標, 執行kingname的指標]]
'''
雜湊值的取余為1,因此將indices[1]=0,0為索引,表示這是entries的第乙個
由於始終在entries之後新增屬於,從而達到了使字典有序的效果,且entries這種方式的占用空間也小於之前構建的二維陣列,從而達到了功能的增強與效能的提公升。
Python有序字典
最近的django開發中用到了有序字典,所以研究了一下,以下。示例 有序字典和通常字典類似,只是它可以記錄元素插入其中的順序,而一般字典是會以任意的順序迭代的。普通字典 1 d1 2 d1 a a 3 d1 b b 4 d1 c c 5 d1 d d 此時的d1 6 for k,v in d1.it...
python有序字典
最近的django開發中用到了有序字典,所以研究了一下,以下。示例 有序字典和通常字典類似,只是它可以記錄元素插入其中的順序,而一般字典是會以任意的順序迭代的。普通字典 1 d1 2 d1 a a 3 d1 b b 4 d1 c c 5 d1 d d 此時的d1 6 for k,v in d1.it...
python有序字典
最近的django開發中用到了有序字典,所以研究了一下,以下。示例 有序字典和通常字典類似,只是它可以記錄元素插入其中的順序,而一般字典是會以任意的順序迭代的。普通字典 由上面的結果可以看出對普通字典進行遍歷,輸出結果是無序的。下面是有序字典 需要匯入collections包 對比兩種輸出結果,不難...