Danny Yoo said unto the world upon 2005-03-28 14:33:
<Snip much useful discussion>
I know I'm rushing this, so please feel free to ask more questions about this.
Hi Danny, Orri, and all,
I'm really glad Orri raised the hashing issues he did, and appreciate your informative posts, Danny. :-)
There are some related things I've been wondering about, and, since hashing is under discussion, I hope no one minds if I throw my issues into the mix.
First issue:
*Almost* all ints are fixed points for the hashing function in the sense that hash(some_int) == some_int. Almost all as:
>>> hash(-1) -2
Any idea why -1 is the sole exception? (Perhaps alternatively: why -1 is not a good value to use as a hash value?) I know it is the sole exception from having run both the following and its decrementing counterpart to check all the integers:
counter = 0
while True:
if hash(counter) != counter:
print counter, type(counter)
break
counter += 1(That took a while!)
Second issue:
I must misunderstand how dictionary lookups work:
>>> a_long = 424242424242424
>>> long_hash = hash(a_long)
>>> hash(long_hash) == long_hash
True
>>> some_dict = {a_long: 4242, long_hash: 42}
>>> some_dict[a_long]
4242
>>> some_dict[long_hash]
42
>>> print 'Brian is confused'
Brian is confused
>>>I had thought lookup was by hash value, and thus expected the access to some_dict to cause troubles. Yet it worked. Is it that lookup is by hash value, and then equality if need be so as to settle ambiguity, or have I completely misunderstood the mechanism of dictionary lookup?
Thanks and best to all,
Brian vdB
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
