Python 字典迭代器性能

Python dictionary iterator performance

When working with dictionaries in Python, this page表示遍历字典元素的时间复杂度为O(n),其中n最大词典的大小。

但是,我认为没有明显的方法可以遍历散列的元素 table。在遍历散列 table 的元素时,我可以假设 dict.iteritems() 的良好性能而没有太多开销吗?

由于词典在 Python 中被大量使用,我认为这是以某种巧妙的方式实现的。不过,我需要确定一下。

如果你看notes on Python's dictionary source code,我认为相关的要点如下:

Those methods (iteration and key listing) loop over every potential entry

将有多少个潜在条目,作为最大大小的函数(曾经存储在该字典中的最大键数)?查看同一文档中的以下两个部分:

Maximum dictionary load in PyDict_SetItem. Currently set to 2/3

Growth rate upon hitting maximum load. Currently set to *2.

这表明字典的稀疏度将在 1/3~2/3 左右(除非增长率设置为 *4,否则为 1/6~2/3)。所以基本上你将为每个键检查最多 3 个(如果 *4 则为 6 个)潜在条目。

当然,无论是 3 个条目还是 1000 个条目,它仍然是 O(n),但 3 似乎是一个相当可接受的常数。

顺便提一下,这里是其余的源代码和文档,包括 DictObject 的源代码和文档:

http://svn.python.org/projects/python/trunk/Objects/