用于更快地查找 Python 字典的预散列字符串键?

Posted

技术标签:

【中文标题】用于更快地查找 Python 字典的预散列字符串键?【英文标题】:Pre-hashed string keys for faster Python dictionaries lookup? 【发布时间】:2011-10-25 11:20:58 【问题描述】:

如何指示 python 在内部存储我的字符串的预哈希版本,以便在我使用我的字符串作为键执行 dict/set 查找时使用该值?

我记得几周前读过它,但目前在 python 文档中找不到它:-/

【问题讨论】:

【参考方案1】:

字符串实习可能是你想的。

sys.intern in Python 3

intern in Python 2

【讨论】:

请注意,您可能不需要使用它;字符串的哈希计算一次并缓存,字符串文字总是被保留。 是的,我在查看您的答案之前发现了它。不好的是它需要字典键也已被实习,而我使用的字典来自第三方包。 "string literals are always interned:" 这也适用于旧的python 2.5吗? 字符串作为解析和加载 .py 或 .pyc 文件的过程的一部分被留存。如果您想确定特定版本的具体实现细节,您需要深入研究源代码,但对于一个粗略的经验示例,您可以这样做:a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaa'; b = 'aaaaaaaaaaaaaaaaaaaaaaaaaaa'; id(a) == id(b)。如果字符串被实习,它们将具有相同的 id。您还可以简单地分析您的代码,看看实习是否真的有帮助。 有趣,它适用于所有这些情况:a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaa'; b = 'aaaaaaaaaaaaaaaaaaaaaaaaaaa'; id(a) == id(b)a='aaaa'; b='a'*4; id(a)==id(b),甚至a='aaaa'; b='a%s' % 'aaa'; id(a)==id(b)

以上是关于用于更快地查找 Python 字典的预散列字符串键?的主要内容,如果未能解决你的问题,请参考以下文章

Python字典:TypeError:不可散列的类型:'list'

python课程第三周 内置数据结构——字典

Python 字典操作

查找:哈希表

python里面词典作用是啥?

Dictionary<TKey, TValue> 中的散列过程是如何工作的