用于更快地查找 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 字典的预散列字符串键?的主要内容,如果未能解决你的问题,请参考以下文章