這期內容當中小編將會給大家?guī)碛嘘P如何實現(xiàn)python dict,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
公司主營業(yè)務:成都做網站、網站設計、外貿營銷網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出昭平免費做網站回饋大家。
Python中dict對象是表明了其是一個原始的Python數(shù)據(jù)類型,按照鍵值對的方式存儲,其中文名字翻譯為字典,顧名思義其通過鍵名查找對應的值會有很高的效率,時間復雜度在常數(shù)級別O(1).
dict底層實現(xiàn)
在Python2中,dict的底層是依靠哈希表(Hash Table)進行實現(xiàn)的,使用開放地址法解決沖突.
所以其查找的時間復雜度會是O(1).
Dict的操作實現(xiàn)原理(包括插入、刪除、以及緩沖池等)
首先介紹:PyDictObject對象的元素搜索策略:
有兩種搜索策略,分別是lookdict和lookdict_string,lookdict_string就是lookdict在對于PyStringObject進行搜索時的特殊形式,那么通用的搜索策略lookdict的主要邏輯是:
(1)對第一個entry的查找:
a)根據(jù)hash值獲得entry的索引
b)若entry處于unused態(tài),則搜索結束;若entry所指向的key與搜索的key相同,則搜索成功
c)若當前entry處于dummy態(tài),則設置freeslot(這里的freeslot是可以返回作為下一個立即可用的地址來存儲entry)
d)檢查Active態(tài)的entry,若其key所指向的值與搜索的值相同,則搜索成功
(2)對剩余的探測鏈中的元素的遍歷查找:
a)根據(jù)所采用的探測函數(shù),獲得探測鏈上的下一個待檢查的entry
b)檢查到一個unused態(tài)的entry,表明搜索失敗:
如果freeslot不為空,則返回freeslot;否則返回unused態(tài)的entry
c)檢查entry的key與所搜索的key的引用是否相同,相同則搜索成功,返回entry
d)檢查entry的key與所搜索的key的值是否相同,相同則搜索成功,返回entry
e)遍歷過程中,發(fā)現(xiàn)dummy態(tài)的entry,且freeslot未設置,則設置freeslot
接下來是:PyDictObject對象的元素插入與刪除的策略:
需要首先用到搜索策略,搜索成功,則直接將值進行替換,搜索失敗,返回unused態(tài)或dummy態(tài)的entry,設置key、value和hash值,并且根據(jù)目前插入的元素情況進行ma_table的大小的調整(調整的依據(jù)就是裝載率,根據(jù)是否大于2/3來進行調整);刪除也是類似,先計算hash值,然后搜索相應的entry,搜索成功,刪除entry中維護的元素,將entry從Active態(tài)修改為dummy態(tài)
在PyDictObject的實現(xiàn)過程中,會用到緩沖池,在PyDictObject對象被銷毀的時候,才開始接納被緩沖的PyDictObject對象,定義的緩沖池可接納的對象數(shù)量是80個,創(chuàng)建新PyDictObject對象的時候,如果緩沖池中有,則可以直接從緩沖池中取出使用
上述就是小編為大家分享的如何實現(xiàn)python dict了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享題目:如何實現(xiàn)pythondict
分享鏈接:http://chinadenli.net/article38/jiejsp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、用戶體驗、App設計、定制開發(fā)、網站營銷、軟件開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)