Jia*_*ong 6 python language-design list data-structures python-internals
listPython中的A 现在实现为动态指针数组,因此它不适合在前端插入和删除.但是,环形缓冲区也支持O(1)索引.它也可以像动态数组一样扩展和收缩,以支持两端的O(1)摊销插入和删除.为什么CPython没有选择这个实现,或者它的主要缺点是什么?
使用环形缓冲区,每次访问都需要进行一些索引转换,除非起始位置恰好位于索引 0。但即便如此,您也必须检查起始位置是否为 0。
O(1) 只是意味着该操作具有固定成本,但它并不能告诉您该固定成本是高还是低。使用动态数组,通过索引访问元素的成本尽可能低:检查范围,然后访问该项目。
关于该主题的 Python 常见问题解答没有讨论替代实现技术,但它确实提到通过索引访问元素作为优化目标: https ://docs.python.org/3/faq/design.html#how-are-lists -在cpython中实现