91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現python dict

發布時間:2020-07-14 09:28:07 來源:億速云 閱讀:192 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何實現python dict,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

  Python中dict對象是表明了其是一個原始的Python數據類型,按照鍵值對的方式存儲,其中文名字翻譯為字典,顧名思義其通過鍵名查找對應的值會有很高的效率,時間復雜度在常數級別O(1).

dict底層實現

在Python2中,dict的底層是依靠哈希表(Hash Table)進行實現的,使用開放地址法解決沖突.

所以其查找的時間復雜度會是O(1).

Dict的操作實現原理(包括插入、刪除、以及緩沖池等)

首先介紹:PyDictObject對象的元素搜索策略:

有兩種搜索策略,分別是lookdict和lookdict_string,lookdict_string就是lookdict在對于PyStringObject進行搜索時的特殊形式,那么通用的搜索策略lookdict的主要邏輯是:

(1)對第一個entry的查找:

a)根據hash值獲得entry的索引

b)若entry處于unused態,則搜索結束;若entry所指向的key與搜索的key相同,則搜索成功

c)若當前entry處于dummy態,則設置freeslot(這里的freeslot是可以返回作為下一個立即可用的地址來存儲entry)

d)檢查Active態的entry,若其key所指向的值與搜索的值相同,則搜索成功

(2)對剩余的探測鏈中的元素的遍歷查找:

a)根據所采用的探測函數,獲得探測鏈上的下一個待檢查的entry

b)檢查到一個unused態的entry,表明搜索失敗:

如果freeslot不為空,則返回freeslot;否則返回unused態的entry

c)檢查entry的key與所搜索的key的引用是否相同,相同則搜索成功,返回entry

d)檢查entry的key與所搜索的key的值是否相同,相同則搜索成功,返回entry

e)遍歷過程中,發現dummy態的entry,且freeslot未設置,則設置freeslot

接下來是:PyDictObject對象的元素插入與刪除的策略:

需要首先用到搜索策略,搜索成功,則直接將值進行替換,搜索失敗,返回unused態或dummy態的entry,設置key、value和hash值,并且根據目前插入的元素情況進行ma_table的大小的調整(調整的依據就是裝載率,根據是否大于2/3來進行調整);刪除也是類似,先計算hash值,然后搜索相應的entry,搜索成功,刪除entry中維護的元素,將entry從Active態修改為dummy態

在PyDictObject的實現過程中,會用到緩沖池,在PyDictObject對象被銷毀的時候,才開始接納被緩沖的PyDictObject對象,定義的緩沖池可接納的對象數量是80個,創建新PyDictObject對象的時候,如果緩沖池中有,則可以直接從緩沖池中取出使用

上述就是小編為大家分享的如何實現python dict了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤城县| 鹿邑县| 新龙县| 黄大仙区| 五峰| 甘谷县| 建昌县| 台南市| 榕江县| 赣州市| 乡宁县| 万宁市| 馆陶县| 阳山县| 吉木萨尔县| 邛崃市| 台湾省| 石嘴山市| 西平县| 乐至县| 临城县| 陕西省| 新巴尔虎右旗| 遵化市| 棋牌| 东丽区| 固原市| 吴忠市| 乌恰县| 威远县| 荔浦县| 横峰县| 延寿县| 玉屏| 蕉岭县| 驻马店市| 五台县| 奎屯市| 盐津县| 塘沽区| 金坛市|