Python內置數據結構和算法 學習筆記

Python中collections模塊提供的一些內置數據結構拓展

注:有空看看源碼實現原理

  1. nametuple()(創建命名元組子類的工廠函數)
  2. deque類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)
  3. Counter字典的子類,提供了可哈希對象的計數功能
  4. OrderedDict字典的子類,保存了他們被添加的順序
  5. defaultdict字典的子類,提供了一個工廠函數,爲字典查詢提供一個默認值
    更多參考:python內置模塊

Python dict底層結構

dict底層使用了哈希表

  1. 爲了支持快速查找使用哈希表作爲底層
  2. 哈希表平均查找時間複雜度O(1)
  3. CPython解釋器使用二次探查解決哈希衝突問題
  4. 解決哈希衝突
  5. 哈希擴容: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區別

  1. 都是線性結構、支持下標訪問
  2. list是可變對象,tuple是保存的引用不可變,比如tuple中包容可變對象,如list,函數對list修改了,內容是會改變的
  3. list沒有辦法作爲字典的key,tuple可以(可變對象不可hash),因爲list有可能因爲添加新的元素而導致內存地址的更換
發佈了16 篇原創文章 · 獲贊 6 · 訪問量 2625
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章