我编写了一个类,其.__hash__()
实现需要很长时间才能执行。我一直在考虑缓存它的哈希值,并将它存储在像 ._hash
这样的变量中,这样 .__hash__()
方法就会简单地返回 ._hash
。 (将在 .__init__()
末尾或第一次调用 .__hash__()
时计算。)
我的理由是:“这个对象是不可变的 -> 它的哈希永远不会改变 -> 我可以缓存哈希。”
但现在我开始思考:您可以对任何 可散列对象说同样的话。 (哈希值是其 id 的对象除外。)
那么有没有理由不缓存一个对象的散列,除了散列计算非常快的小对象?
最佳答案
当然,把哈希值缓存起来就可以了。事实上,Python 本身就是为字符串这样做的。折衷是在散列计算的速度和保存散列值所需的空间之间。例如,这种权衡就是为什么元组不缓存它们的哈希值,但字符串缓存它们(参见 request for enhancement #1462796 )。
关于python - 有什么理由*不*缓存对象的哈希值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787405/