Python中collections模塊提供的一些內置數據結構拓展
注:有空看看源碼實現原理
- nametuple()(創建命名元組子類的工廠函數)
- deque類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)
- Counter字典的子類,提供了可哈希對象的計數功能
- OrderedDict字典的子類,保存了他們被添加的順序
- defaultdict字典的子類,提供了一個工廠函數,爲字典查詢提供一個默認值
更多參考:python內置模塊
Python dict底層結構
dict底層使用了哈希表
- 爲了支持快速查找使用哈希表作爲底層
- 哈希表平均查找時間複雜度O(1)
- CPython解釋器使用二次探查解決哈希衝突問題
- 解決哈希衝突
- 哈希擴容:HashMap的初始值是16(1,<<4),負載因子0.75(聽說這個值是經過大量實踐算出來的,這個值設定最合理),初始值16指的是數組的長度(1<<4是2的4次方,這樣寫計算機執行更快),當數組的容量達到12(16*0.75)時,這時開始擴容,擴容爲32(1<<5即2的5次方),每次擴容按照2的倍數遞增,擴容是爲了減少hash碰撞,讓鏈表的數據更少(最好鏈表上就一個數據,即爲數組的下標數據)
Python中list/tuple區別
- 都是線性結構、支持下標訪問
- list是可變對象,tuple是保存的引用不可變,比如tuple中包容可變對象,如list,函數對list修改了,內容是會改變的
- list沒有辦法作爲字典的key,tuple可以(可變對象不可hash),因爲list有可能因爲添加新的元素而導致內存地址的更換