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. 无序

以上均为学习期间个人的学习体会,如有错误,请指正。

猜你喜欢

转载自blog.csdn.net/liufei0714/article/details/81806580