【发布时间】:2013-01-17 20:19:30
【问题描述】:
我想知道python字典的源代码在哪里。我知道源代码可能很难阅读,所以我只是在粗略描述了实现和使用的哈希例程之后。
是否有人知道使用了哪种算法以及他们如何处理冲突,如果使用链接或重建表。
我知道这个问题有点含糊,所以请指出正确的方向会有所帮助。如果有人知道有关 python 字典的任何好的文档,那就太好了。
【问题讨论】:
标签: python dictionary hashtable language-features
我想知道python字典的源代码在哪里。我知道源代码可能很难阅读,所以我只是在粗略描述了实现和使用的哈希例程之后。
是否有人知道使用了哪种算法以及他们如何处理冲突,如果使用链接或重建表。
我知道这个问题有点含糊,所以请指出正确的方向会有所帮助。如果有人知道有关 python 字典的任何好的文档,那就太好了。
【问题讨论】:
标签: python dictionary hashtable language-features
它位于Objects/dictobject.c 文件中。那里也有dictnotes.txt file,指导你了解源代码。
Python 字典使用带有开放寻址的哈希表将键映射到槽。通过“扰动”密钥来解决冲突;一种算法,从大步开始,然后使用越来越小的步长,直到它扫描表以查找下一个空槽。
网上有几篇文章,包括this blog post;您还可以选择《Beautiful Code》一书,以更好地展示代码。
【讨论】:
源代码树有关于字典如何工作的非常好的文档:http://hg.python.org/cpython/file/ab4b8da79a5f/Objects/dictnotes.txt
【讨论】:
还有……这是dict 的活动状态配方,它更有效(from 3 to 24 times more space efficient than regular dictionaries)!! .否则前两个答案很棒!
http://code.activestate.com/recipes/578375-proof-of-concept-for-a-more-space-efficient-faster/?in=user-178123
【讨论】:
dictobject.c 中(不认为任何结论性结果来自它)。在大多数情况下,Python 实现不优于 C 实现。无论如何,这不是答案。