Python入門基礎篇 No.37 —— 字典_核心底層原理_記憶體分析_查詢值物件過程
阿新 • • 發佈:2021-01-10
技術標籤:# 基礎python程式語言資料結構經驗分享程式人生
Python入門基礎篇 No.37 —— 字典_核心底層原理_記憶體分析_查詢值物件過程
文章目錄
前言
一、根據鍵查詢“鍵值對”的底層過程
-
我們明白了,一個鍵值對是如何儲存到陣列中的,根據鍵物件取到值物件,理解起來就簡單了。
-
當我們呼叫 a.get(’name‘),就是根據鍵’name‘查詢到“鍵值對”,從而找到值物件‘Offer’。
-
第一步,我們要計算’name‘物件的雜湊值:
程式碼演示:
>>> x = {}
>>> x['name'] = 'Offer'
>>> x
{'name': 'Offer'}
>>> x.get('name')
'Offer'
>>> bin(hash ('name'))
'-0b1000011010000110111100100010001010000100101101100101111100101'
- 和儲存的底層流程演算法一致,也是依次取雜湊值的不同位置的數字。 假設陣列長度為8,我們可以拿計算出的雜湊值的最右邊 3 位數字作為偏移量,即“101”,十進位制是數字5。我們檢視偏移量 5,對應的 bucket 是否為空。如果為空,則返回 None。如果不為空,則將這個 bucket 的鍵物件計算對應雜湊值,和我們的雜湊值進行比較,如果相等。則將對應“值物件”返回。如果不相等,則再依次取其他幾位數字,重新計算偏移量。依次取完後,仍然沒有找到。則返回 None。
二、用法總結
1.鍵必須可雜湊
- 數字、字串、元組,都是可雜湊的。
- 自定義物件需要支援下面三點:
支援 hash()函式
支援通過__eq__()方法檢測相等性。
若 a==b 為真,則 hash(a)==hash(b)也為真。
2.字典在記憶體中開銷巨大,典型的空間換時間。
3.鍵查詢速度很快
4.往字典裡面新增新建可能導致擴容,導致散列表中鍵的次序變化。因此,不要在遍歷字典的同時進行字典的修改。
總結
以上幫各位總結好了,收藏,關注即可查收。
關注下方公眾號,免費拿Python學習資料!!!