【发布时间】:2019-06-25 04:53:07
【问题描述】:
在 Python3 中,任何类都会有一个默认的 __hash__,它会根据成员变量计算哈希值。我可以将它(显式或隐式)设置为 None 以使该类不可散列,这当然有一些用例。
但是有理由覆盖__hash__吗?
我找不到。
【问题讨论】:
-
我想到的一件事是通过预先计算哈希值并使用
__hash__检索这些预先计算的值来加快速度。 -
如果您的类基于一般不可散列的类型(可能是列表?),但您知道可以以某种独特的方式定义类实例,定义您自己的
__hash__会让您表达这一点。 -
@AndrejKesely 一些(不是很详细的)测试显示没有可测量的差异。但也许对于需要长时间比较数据的类?那会是什么数据?巨大的字符串?
-
@StephenRauch:还没想过那个。
-
@steffen 是的,我的第一个目标是巨大的字符串。或者,如果您的数据是从网络/数据库动态访问的。或者,如果您的数据采用某种不可散列的数据结构(例如
set(),但frozenset()是可散列的)...
标签: python-3.x hash magic-function