list、tuple、set、dict資料結構的優劣
阿新 • • 發佈:2018-11-28
-
list:有序的線性結構、在記憶體中排列整齊、可索引、可變、可迭代
-
優勢:
-
列表中資料在記憶體中是一片排列整齊連續區域,且列表可索引 。所以列表查詢索引時只需要進行地址偏移。速度極快,其時間複雜度為O(1)
-
列表尾部追加與尾部刪除皆不會引起列表資料的整體移動。
-
列表所佔據的記憶體空間比較小
-
有序
-
-
劣勢:
-
列表內的資料,在查詢時需要遍歷整個列表。時間複雜度為O(n)
-
列表在中間執行插入與刪除資料時,會引起整個列表當前插入位置後面的所有資料進行移動。
-
當一個列表長度足夠長時,使其最初分配的空間不足以滿足其連續性時,會引起GC
-
-
-
tuple:有序的線性結構、在記憶體中排列整齊、可索引、不可變、可迭代
- 優勢:
- 元組中資料在記憶體中是一片排列整齊連續區域,可索引 。所以元組查詢索引時只需要進行地址偏移。速度極快,其時間複雜度為O(1)
- 元組一旦建立即不可變。所佔據的記憶體空間不會變化,不會因為元組長度改變而引起GC。
- 有序
- 劣勢:
- 查詢元組中的資料時,同樣需要遍歷整個元組。
- 元組中的資料不可變,(元組中有引用物件時,相當於元組記錄了這個引用物件的“門牌號碼”。所以引用物件改變時,其“門牌號碼”不變。元組ID值不變)
- 優勢:
-
set:無序、可變、可迭代、在記憶體中是一個大雜湊空間、去重
- 優勢:
- set中所有資料都是可以hash,hash後儲存於一個雜湊空間。所以查詢資料時,只需要將資料hash後去匹配。它的in和 not in操作 ,以及它的增、刪操作,其時間複雜度都為O(1)
- set中所有資料都是不重複的
- set可以進行集合運算
- 劣勢:
- 只能儲存可hash的資料型別
- 建立一個set集合時,同時建立了一片大的雜湊空間,用以儲存資料。但是當set中的資料較少時,浪費記憶體空間
- 無序
- 優勢:
-
dict:無序、可變、可迭代、在記憶體中是一個大雜湊空間、key不重複、資料以Key:Value形式存在
- 優勢:
- dict的key查詢時與set類似。其增、刪、改、查操作的時間複雜度都是O(1)
- dict的key都需要hash。故Key唯一。但是相對應的value沒有要求,靈活性大
- 劣勢:
- 建立一個dict時,同時建立了一片大的雜湊空間,用以儲存資料。但是當set中的資料較少時,浪費記憶體空間
- 無序
- 優勢:
以上均為學習期間個人的學習體會,如有錯誤,請指正。