Curiosidad sobre __hash__()

Jesus Cea jcea en jcea.es
Jue Feb 5 11:54:06 CET 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Rodrigo Gallardo wrote:
>>> Me ha sorprendido que la función hash "solo"
>>> devuelva un entero.
>>>
>>> (1,2,3,4).__hash__()
>>> 89902565
>>>
>>> ¿No os parece que aumenta mucho las probabilidades
>>> de que se produzca una colisión no deseada en un
>>> diccionario por ej.?
>> Bueno, si la función hash está bien elegida, un entero de 32-bit da para 
>> 2**31 hash diferentes, y ya tendria que ser grande el diccionario para 
>> que esto sea un problema.
> 
> Esto es la "paradoja del cumpleaños"

La implementación "normal" de "hash" (en Python) es la posición de
memoria del objeto. Así, dos objetos solo coinciden en "__hash__()" si
su posición de memoria es la misma. Osea, se trata del mismo objeto.

En un mundo 32 bits, con 2^32 valores para "__hash__()" es suficiente,
porque no puedes direccionar más memoria que esa.

En resumen, la implementación por defecto de "__hash__()" no es un
verdadero hash, y no está sujeto a la paradoja del cumpleaños.

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea en jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea en jabber.org         _/_/    _/_/          _/_/_/_/_/
.                              _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBSYrFSplgi5GaxT1NAQLO1gP/etaTQPOCqtbV0eL+UEBFSspGMVt5PvTR
9/GaBwJyZb887ttMClJFtuOrqsd39fUOFLi7cOtjhiAYtXVDeUfWakP3D28fIgHV
h0G8QpZSjcDbqq/mT4cnYiaCE5HcnDL8brKWBM5fU4Tf65g4RDGaplKPQaWwQq2l
Ur9BTskvjBg=
=Y2fD
-----END PGP SIGNATURE-----
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es