*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?
[warning: beginners, skip this. Completely inconsequential CPython detail ahead.]
Hi Brian,
Yeah, I remember this from studying the Python C implementation. -1 is used internally in the CPython implementation to represent that the hash function failed in some bad way. It is a pure CPython implementation detail, and is completely not important. *grin*
Thanks Danny,
I did get that it wasn't important as clearly with finitely many ints available to be hash values, uniqueness of hash is out the window independently. But the oddity here did pique my curiosity. The explanation is obvious, once someone else thought of it for me :-) Thanks.
<SNIP quote from C sources which sooner or later I am going to have to learn how to read :-) >
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,
Yes, exactly! That's why equality and hashing codes are tied together in this kind of "if a==b then hash(a)==hash(b)" contract: there's bound to be "collisions" in any hashing scheme. So we have to do something about collisions. Equality is meant to settle things when two keys have the same hash code.
That's nicely put :-)
I just did a quick Google search to see if someone else has written about hash table theory, and trusty Wikipedia came up with a very nice article:
http://en.wikipedia.org/wiki/Hash_table
Thanks for the link.
Best to all,
Brian vdB
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
