hashing an array - howto
John Machin
sjmachin at lexicon.net
Fri Sep 5 19:55:27 EDT 2008
On Sep 6, 9:30 am, John Machin <sjmac... at lexicon.net> wrote:
> On Sep 6, 7:49 am, bearophileH... at lycos.com wrote:
>
> > John Machin:
>
> > > Consider this:>>> hash(123) == hash(123.0) == hash(123L)
> > > True
>
> > Right... Can you explain me why Python designers have chosen to build
> > a hash() like that?
>
> I can't channel them; my rationalisation is this:
>
> Following the Law of Least Astonishment,>> 123 == 123.0 == 123L
>
> True
>
> Consequently if x == y, then adict[x] and adict[y] should give the
> same result.
>
Another reason for not folding in the type of the object is this:
>>> type([])
<type 'list'>
>>> hash(type([]))
505252536
>>> id(type([]))
505252536
IOW hash(T) == id(T) where T is a type. id(obj) is just a memory
address which can vary between executions of the same Python binary on
the same machine ... not very reproducible. There is no guarantee in
the docs for hash about under what circumstances hash(x) != hash(x) of
course; I'm just relying on the least astonishment law again :-)
And, again, we don't know what the OP's full requirements are ...
More information about the Python-list
mailing list