为什么python中set.add比list.append快的多

img

img


同样的逻辑,为什么set.add比list.append快几百倍?非常不解!

https://www.linuxidc.com/Linux/2012-07/66404.html
https://www.cnblogs.com/tintinsoft/articles/9743765.html
上面是实测速度比较

循环速度: list最适合做固定长度的遍历,而且有顺序。所以这种循环尽量用list
查询速度: set > list, set查询的key都是hash过的,所以速度最快,list不适合用来做查询
增删速度: set > list, list的append操作尽量少做,因为会涉及重新分配地址的问题,set只需要增长指针链表
空间上: 由于list默认预留的空间会随着append指数级的变大,所以空间上也是set。

存储结构不同引起的。
list支持随机(按序号索引)存取,需要是连续存储的。这种结构在增减元素时往往涉及到存储空间的重新分配,以及旧数据的迁移,会比较耗时。
set则通常是以树的结构进行链式存储的,这样会使得查找过程很快。增减元素通常是指针操作,不涉及空间分配及数据迁移问题,因此比list快。

有一种情况是list一定比set有优势的话那就是给出序号,查找相应元素。

因为会涉及重新分配地址的问题,set只需要增长指针链表;list可能会扩容