Python 的 List 是如何实现的?

问题描述

是链表还是数组?我四处寻找,只发现人们在猜测.我的 C 知识还不够好,无法查看源代码.

Is it a linked list, an array? I searched around and only found people guessing. My C knowledge isn't good enough to look at the source code.


解决方案

这是一个动态数组.实际证明:无论索引如何,索引都需要(当然差异非常小(0.0013 µsecs!))相同的时间:

It's a dynamic array. Practical proof: Indexing takes (of course with extremely small differences (0.0013 µsecs!)) the same time regardless of index:

...>python -m timeit --setup="x = [None]*1000" "x[500]"
10000000 loops, best of 3: 0.0579 usec per loop

...>python -m timeit --setup="x = [None]*1000" "x[0]"
10000000 loops, best of 3: 0.0566 usec per loop

如果 IronPython 或 Jython 使用链表,我会感到震惊 - 它们会破坏许多基于列表是动态数组的假设而广泛使用的库的性能.

I would be astounded if IronPython or Jython used linked lists - they would ruin the performance of many many widely-used libraries built on the assumption that lists are dynamic arrays.

相关文章