【问题标题】:Python dictionary detailsPython字典详细信息
【发布时间】:2013-01-17 20:19:30
【问题描述】:

我想知道python字典的源代码在哪里。我知道源代码可能很难阅读,所以我只是在粗略描述了实现和使用的哈希例程之后。

是否有人知道使用了哪种算法以及他们如何处理冲突,如果使用链接或重建表。

我知道这个问题有点含糊,所以请指出正确的方向会有所帮助。如果有人知道有关 python 字典的任何好的文档,那就太好了。

【问题讨论】:

    标签: python dictionary hashtable language-features


    【解决方案1】:

    它位于Objects/dictobject.c 文件中。那里也有dictnotes.txt file,指导你了解源代码。

    Python 字典使用带有开放寻址的哈希表将键映射到槽。通过“扰动”密钥来解决冲突;一种算法,从大步开始,然后使用越来越小的步长,直到它扫描表以查找下一个空槽。

    网上有几篇文章,包括this blog post;您还可以选择《Beautiful Code》一书,以更好地展示代码。

    【讨论】:

    • +1 回复速度!!问题发布后仅 33 秒 :)
    【解决方案2】:

    源代码树有关于字典如何工作的非常好的文档:http://hg.python.org/cpython/file/ab4b8da79a5f/Objects/dictnotes.txt

    【讨论】:

      【解决方案3】:

      还有……这是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

      【讨论】:

      • 您是否针对内置 dict 测试了该实现(在不同的场景中)?
      • 是的...我已经测试了它们的默认尺寸,;它是 python 内置字典的 1/4..
      • 注意它来自核心开发人员 (Raymond Hettinger),并被考虑包含在 dictobject.c 中(不认为任何结论性结果来自它)。在大多数情况下,Python 实现优于 C 实现。无论如何,这不是答案。
      • @delnan:是的,这不是一个答案.. 但至少它会给出一个关于 dict 的想法,并且它正在以可读的 python 格式向 OP 工作!这就是我在帖子中写道的原因;前两个答案很好!!!
      • @PeterRowell:这个配方的纯(或可实现的)cython 版本是否可以增加一些改进? (因为它只有 175 行……我还没有尝试过 cythonized 版本;只是征求意见)
      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 2014-04-13
      • 2023-02-24
      • 2020-12-06
      • 2012-04-14
      • 2018-06-27
      • 2016-11-21
      • 1970-01-01
      相关资源
      最近更新 更多