[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