I've written a class whose .__hash__()
implementation takes a long time to execute. I've been thinking to cache its hash, and store it in a variable like ._hash
so the .__hash__()
method would simply return ._hash
. (Which will be computed either at the end of the .__init__()
or the first time .__hash__()
is called.)
My reasoning was: "This object is immutable -> Its hash will never change -> I can cache the hash."
But now that got me thinking: You can say the same thing about any hashable object. (With the exception of objects whose hash is their id.)
So is there ever a reason not to cache an object's hash, except for small objects whose hash computation is very fast?