Python 字典(内置哈希表)是如何实现的? [复制]

Posted

技术标签:

【中文标题】Python 字典(内置哈希表)是如何实现的? [复制]【英文标题】:How are Python dictionaries (builtin hashtables) implemented? [duplicate] 【发布时间】:2013-11-16 17:04:23 【问题描述】:

我想知道 python dict (dictionary/hashtable) 是如何实现的。特别是,如果我写类似

my_dict = "key": "key: "key": "value"

python 解释器可能做什么?我想知道它的内部工作原理。

它是否将每个字典视为一个对象(大部分是)?如果是这样,不同字典中相同键的散列是否相同?例如

dict1 = "key": "value", "k": "v"
dict2 = "key": [1, 2.], "k": "value"

在这 2 个不同的字典中查找键会有多大不同?另外,它如何决定桶的大小?还是类似于列表大小的处理? 希望你能得到我的问题。谢谢!

编辑 - 不,我不是在问哈希表是如何工作的。我知道那部分。

【问题讨论】:

您是在问dict1["key"] 调用的哈希函数是否与dict2["key"] 调用的哈希函数相同? 查看这个问题的答案:***.com/questions/13514716/… 我可以将自己的问题标记为重复吗?因为,我found an answer,但问题不是那么具体。 所有主要的python实现都是开源的。随意查看源代码。 糟糕,我说的“内部实现”太过分了。我要求提供理论/描述性解释(不是实际代码)(在重复问题中得到它)。 【参考方案1】:

Python 字典基本上都是哈希表的实现。现在,问题是什么是哈希表?来自***,简短而甜蜜的答案:

哈希表(也称为哈希映射)是一种数据结构,用于实现 关联数组,一种可以将键映射到值的结构 哈希表使用哈希函数计算桶或槽数组的索引,从中可以找到正确的值。

SO 中的这两个问题涵盖了您感兴趣的一些内容:

How are Python's Built In Dictionaries Implemented

How can Python dict have multiple keys with same hash?

如果我再往前走,我会重复同样的事情。

【讨论】:

【参考方案2】:

The specification 读取

Python 中内置的另一种有用的数据类型是字典(参见 映射类型 - 字典)。字典有时会在其他地方找到 语言称为“联想记忆”或“联想数组”。 最好将字典视为一组无序的键:值 对,要求密钥是唯一的(在一个 字典)。一对大括号创建一个空字典:。配售 大括号内的键:值对的逗号分隔列表添加 字典的初始键:值对;这也是方法 字典写在输出上。

并通过hash function 以确定的方式将项目放置在内存中

【讨论】:

以上是关于Python 字典(内置哈希表)是如何实现的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用python实现哈希表字典集合

字典和哈希表之间的真正区别是啥?

如何将 Python 字典转换为 JavaScript 哈希表?

Python字典的实现原理

Python算法教程第二章知识点:计时模块字典与散哈希表图与树的实现成员查询插入对象

python 字典为啥这么快