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