[Python-Dev] Caching tuple hashes
Andrew Bennetts
andrew-pythondev at puzzling.org
Mon Aug 4 19:14:15 EDT 2003
On Mon, Aug 04, 2003 at 02:51:29AM -0400, Raymond Hettinger wrote:
> Strings save their hash values to avoid recomputation in subsequent
> hashings. In contrast, tuples recompute on every call. I've googled
> around and cannot find the rationale for this. Some ideas are:
>
> * the time to initialize and check the hash fields isn't repaid on average
> * it isn't worth an extra structure field for storing the hash value
> * C code can mutate immutables so there is a safety risk
> * nobody ever thought of it (unlikely) or got around to it (more likely).
Perhaps this:
* Tuples can contain badly-behaved mutables, e.g.:
>>> class X:
... x = 1
... def __hash__(self):
... return self.x
...
>>> x = X()
>>> t = (x,)
>>> hash(t)
-1660579480
>>> X.x = 2
>>> hash(t)
-1660579477
-Andrew.
More information about the Python-Dev
mailing list