python中列表與字典的底層實現

2021-10-05 05:02:44 字數 1407 閱讀 3874

本文主要圍繞效率開始說起

常見演算法效率複雜度

o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)

python列表內建操作方法的複雜度如下

常見的順序表儲存方式如下,python則採用的是分離式結構,表頭只儲存最大容量值,元素個數和儲存區的實體地址,

儲存區的結構示意圖,其中儲存區域涉及的主要知識點為擴容問題,python採用的是容量加倍的方式,但當元素超過50000個時,其便會改變策略,以避免不必要的浪費

擴充的兩種策略

每次擴充容量加倍,如每次擴充增加一倍儲存空間。

python標準型別list就是一種元素個數可變的線性表,可以加入和刪除元素,並在各種操作中維持已有元素的順序(即保序),而且還具有以下行為特徵:

優質鏈結參考:

dict分析

字典是通過雜湊表或說雜湊表實現的。字典也被稱為關聯陣列,還稱為雜湊陣列等。也就是說,字典也是乙個陣列,但陣列的索引是鍵經過雜湊函式處理後得到的雜湊值。雜湊函式的目的是使鍵均勻地分布在陣列中,並且可以在記憶體中以o(1)的時間複雜度進行定址,從而實現快速查詢和修改。雜湊表中雜湊函式的設計困難在於將資料均勻分布在雜湊表中,從而儘量減少雜湊碰撞和衝突。由於不同的鍵可能具有相同的雜湊值,即可能出現衝突,高階的雜湊函式能夠使衝突數目最小化

什麼是hash衝突?

假設hash表的大小為9(即有9個槽),現在要把一串資料存到表裡:5,28,19,15,20,33,12,17,10

簡單計算一下:hash(5)=5, 所以資料5應該放在hash表的第5個槽裡;hash(28)=1,所以資料28應該放在hash表的第1個槽裡;hash(19)=1,也就是說,資料19也應該放在hash表的第1個槽裡——於是就造成了碰撞(也稱為衝突,collision

關於開放位址法與鏈結優缺點

開放位址法的具體實現

Python中的列表與字典

1,列表 由一系列按特定順序排列的元素組成。你可以建立包含字母表中所有字母 數字0 9或所有家庭成員姓名的列表 也可以將任何東西加入列表中,其中的元素之間可以沒有 任何關係。鑑於列表通常包含多個元素,給列表指定乙個表示複數的名稱 如letters digits 或names 是個不錯的主意。在pyt...

python的列表 元組與字典

python支援一種資料結構的基本概念,即容器 container 容器基本上就是包含其他物件的物件。兩種主要的容器就是序列 如列表和元組 與對映 如字典 在序列中,每個元素都有編號,這個編號我們也可以稱之為索引,從0開始遞增。而在對映中,每個元素都有名稱 也叫做鍵 列表的特點就是可以修改,而且列表...

python字典的底層原理

無序,可變的容器資料結構,key value資料儲存 key可以為數值,字串,元組,但是唯一,value則支援多種資料型別 讀取速度快,時間複雜度o 1 o 1 o 1 python字典的底層實現是雜湊表,即帶有索引和儲存空間的表 如d 建立乙個空字典,初始化乙個長度為8 的c陣列arr 1.插入資...