python字典内存分析_(一)Python入门-3序列:18字典-核心底层原理-内存分析-查找值对象过程...
一:根據鍵查找“鍵值對”的底層過程
明白一個鍵值對是如何存儲到數組中的,根據鍵對象取到值對象,理解起來就 簡單了。
>>> a.get("name")
'jack'
當我們調用a.get(“name”),就是根據鍵“name”查找到“鍵值對”,從而找到值對象“jack”。
第一步,我們仍然要計算“name”對象的散列值:
>>> bin(hash("name"))
'-0b1010111101001110110101100100101'
和存儲的底層流程算法一致,也是依次取散列值的不同位置的數字。 假設數組長度為 8,我們可以拿計算出的散列值的最右邊 3位數字作為偏移量,即“101”,十進制是數字 5。我們查看偏移量 5,對應的bucket 是否為空。如果為空,則返回None。如果不為空, 則將這個bucket的鍵對象計算對應散列值,和我們的散列值進行比較,如果相等。則將對 應“值對象”返回。如果不相等,則再依次取其他幾位數字,重新計算偏移量。依次取完后, 仍然沒有找到。則返回 None。流程圖如下:
二:用法總結
1. 鍵必須可散列
(1) 數字、字符串、元組,都是可散列的。
(2) 自定義對象需要支持下面三點:
a 支持 hash()函數
b 支持通過__eq__()方法檢測相等性。
c 若a==b為真,則 hash(a)==hash(b)也為真。
2. 字典在內存中開銷巨大,典型的空間換時間。
3. 鍵查詢速度很快
4. 往字典里面添加新建可能導致擴容,導致散列表中鍵的次序變化。因此,不要在遍歷字典的同時進行字典的修改。
總結
以上是生活随笔為你收集整理的python字典内存分析_(一)Python入门-3序列:18字典-核心底层原理-内存分析-查找值对象过程...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的django框架与spri
- 下一篇: python常用内置函数汇总_太全了!P