我一直无法找到这些信息的来源,没有自己查看 Python 源代码以确定对象是如何工作的。有谁知道我在哪里可以在网上找到这个?
Jeremy Banks
问问题
3879 次
3 回答
19
查看 py dot org wiki 上的TimeComplexity页面。至少就时间复杂度而言,它涵盖了 set/dicts/lists/etc。
于 2008-09-05T16:19:03.537 回答
15
Raymond D. Hettinger 就Python 的内置集合(称为“Core Python Containers - Under the Hood”)进行了精彩的演讲(幻灯片)。我看到的版本主要集中在set
and dict
,但list
也被覆盖了。
博客中还有一些来自 EuroPython 的相关幻灯片的照片。
以下是我的笔记摘要list
:
- 将项目存储为指针数组。下标花费 O(1) 时间。追加成本摊销 O(1) 时间。插入花费 O(n) 时间。
- 试图
memcpy
通过过度分配来避免增长。许多小列表会浪费大量空间,但大列表永远不会浪费超过 12.5% 的过度分配。 - 一些操作预先调整大小。给出的示例是
range(n)
、map()
、list()
、[None] * n
和切片。 - 缩小时,数组
realloc
仅在浪费 50% 的空间时才被编辑。pop
很便宜。
于 2008-09-05T11:04:04.310 回答
2
如果你问我认为你在问什么,你可以在这里找到它们……第 476 页及以后。
它是围绕 Python 的优化技术编写的;它主要是时间效率的大 O 符号,没有太多内存。
于 2008-09-05T04:52:09.057 回答