1. 程式人生 > 其它 >Python入門基礎篇 No.37 —— 字典_核心底層原理_記憶體分析_查詢值物件過程

Python入門基礎篇 No.37 —— 字典_核心底層原理_記憶體分析_查詢值物件過程

技術標籤:# 基礎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學習資料!!!

在這裡插入圖片描述