1. 程式人生 > >list、tuple、set、dict資料結構的優劣

list、tuple、set、dict資料結構的優劣

  1. list:有序的線性結構、在記憶體中排列整齊、可索引、可變、可迭代

    1. 優勢:

      1. 列表中資料在記憶體中是一片排列整齊連續區域,且列表可索引 。所以列表查詢索引時只需要進行地址偏移。速度極快,其時間複雜度為O(1)

      2. 列表尾部追加與尾部刪除皆不會引起列表資料的整體移動。

      3. 列表所佔據的記憶體空間比較小

      4. 有序

    2. 劣勢:

      1. 列表內的資料,在查詢時需要遍歷整個列表。時間複雜度為O(n)

      2. 列表在中間執行插入與刪除資料時,會引起整個列表當前插入位置後面的所有資料進行移動。

      3. 當一個列表長度足夠長時,使其最初分配的空間不足以滿足其連續性時,會引起GC

  2. tuple:有序的線性結構、在記憶體中排列整齊、可索引、不可變、可迭代

    1. 優勢:
      1. 元組中資料在記憶體中是一片排列整齊連續區域,可索引 。所以元組查詢索引時只需要進行地址偏移。速度極快,其時間複雜度為O(1)
      2. 元組一旦建立即不可變。所佔據的記憶體空間不會變化,不會因為元組長度改變而引起GC。
      3. 有序
    2. 劣勢:
      1. 查詢元組中的資料時,同樣需要遍歷整個元組。
      2. 元組中的資料不可變,(元組中有引用物件時,相當於元組記錄了這個引用物件的“門牌號碼”。所以引用物件改變時,其“門牌號碼”不變。元組ID值不變)
  3. set:無序、可變、可迭代、在記憶體中是一個大雜湊空間、去重

    1. 優勢:
      1. set中所有資料都是可以hash,hash後儲存於一個雜湊空間。所以查詢資料時,只需要將資料hash後去匹配。它的in和 not in操作 ,以及它的增、刪操作,其時間複雜度都為O(1)
      2. set中所有資料都是不重複的
      3. set可以進行集合運算
    2. 劣勢:
      1. 只能儲存可hash的資料型別
      2. 建立一個set集合時,同時建立了一片大的雜湊空間,用以儲存資料。但是當set中的資料較少時,浪費記憶體空間
      3. 無序
  4. dict:無序、可變、可迭代、在記憶體中是一個大雜湊空間、key不重複、資料以Key:Value形式存在

    1. 優勢:
      1. dict的key查詢時與set類似。其增、刪、改、查操作的時間複雜度都是O(1)
      2. dict的key都需要hash。故Key唯一。但是相對應的value沒有要求,靈活性大
    2. 劣勢:
      1. 建立一個dict時,同時建立了一片大的雜湊空間,用以儲存資料。但是當set中的資料較少時,浪費記憶體空間
      2. 無序

 

以上均為學習期間個人的學習體會,如有錯誤,請指正。