与列表相比,cPython设置了哪些性能?

时间:2011-03-06 22:56:31

标签: python cpython

我刚刚找到了这些performance notes for cPython lists

python列表所需的时间......

  • ...获取或设置单个项目:O(1)
  • ...将一个项目附加到列表中:最差O(n ^ 2),但通常为O(1)
  • ...插入一个项目:O(n),其中n是插入项目后的元素数量
  • ...删除项目:O(n)

现在我想知道cPython集的相同性能特征。另外,我想在列表/集上迭代的速度有多快。我对大型名单/集合特别感兴趣。

1 个答案:

答案 0 :(得分:1)

AFAIK,Python“规范”并未强制实施列表,词典或集合的特定数据结构,因此无法“正式”回答。如果你只关心CPython(参考实现),那么我们可以抛出一些非官方的复杂性。您可能希望重新制定问题以定位特定的Python实现。

无论如何,你提到的复杂性是不对的。假设动态调整大小的数组实现,追加项目是分摊O(1):大多数情况下,您只需复制新值,在最坏的情况下,您需要重新分配,复制所有n项,加上新的。接下来,插入具有完全相同的最坏情况,因此它具有相同的复杂性上限,但在最好的情况下,它只移动k项,其中k是项目数过去您要插入的位置。