python - 有什么理由*不*缓存对象的哈希值吗?

标签 python caching hash

我编写了一个类,其.__hash__() 实现需要很长时间才能执行。我一直在考虑缓存它的哈希值,并将它存储在像 ._hash 这样的变量中,这样 .__hash__() 方法就会简单地返回 ._hash。 (将在 .__init__() 末尾或第一次调用 .__hash__() 时计算。)

我的理由是:“这个对象是不可变的 -> 它的哈希永远不会改变 -> 我可以缓存哈希。”

但现在我开始思考:您可以对任何 可散列对象说同样的话。 (哈希值是其 id 的对象除外。)

那么有没有理由缓存一个对象的散列,除了散列计算非常快的小对象?

最佳答案

当然,把哈希值缓存起来就可以了。事实上,Python 本身就是为字符串这样做的。折衷是在散列计算的速度和保存散列值所需的空间之间。例如,这种权衡就是为什么元组不缓存它们的哈希值,但字符串缓存它们(参见 request for enhancement #1462796 )。

关于python - 有什么理由*不*缓存对象的哈希值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787405/

相关文章:

java - 如何确定性地将连续整数映射到均匀分布的 double

python - python 中的组合 filter() 无法按预期工作

调用时刷新缓冲区的 Python 打印函数?

python beautifulsoup - 如何在下一页没有唯一地址的情况下转到下一页

caching - 客户端文件缓存

asp.net - 如何确保静态内容在客户端缓存?

c# - 均匀分布给定属性的散列

string - 是否有Delphi XE2字符串哈希函数保证可以用于查找的唯一性?

Python Scrapy不返回中文字符

caching - 解析 Ionic 应用程序的本地数据存储?