在Python内置序列类型中,我应该在哪里找到时间和空间复杂度?

19

除了查看Python源代码以确定对象如何工作之外,我一直无法找到此信息的来源。有人知道我可以在哪里在线找到吗?

3个回答

19

请查看py点org wiki上的时间复杂性页面。它至少涵盖了集合/字典/列表等方面的时间复杂度。


15

Raymond D. Hettinger做了一场关于Python内置集合的精彩演讲,名为“核心Python容器-深入剖析”,您可以观看视频幻灯片)。我所看到的版本主要集中在setdict上,但也有涉及list

此外,在博客中还有一些EuroPython相关幻灯片的照片。

以下是我对list的笔记总结:

  • 将项目存储为指针数组。下标的成本为O(1)时间。添加操作的平均成本为O(1)时间。插入操作的成本为O(n)时间。
  • 在增长时尽量避免memcpy,通过过多分配而浪费大量空间。许多小列表会浪费很多空间,但大型列表最多只浪费超额分配的12.5%。
  • 某些操作会预先设置大小。例如:range(n)map()list()[None] * n和切片。
  • 在缩小时,只有当浪费了50%的空间时才会重新分配数组。pop是廉价的。

2
如果你问的是我想象中的那个问题,你可以在这里找到它们:这里... 从第476页开始。

它主要围绕Python的优化技术编写;它主要是关于时间效率的大O符号,而不是内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接