I believed that hash()
function works the same in all python interpreters. But it differs when I run it on my mobile using python for android. I get same hash value for hashing strings and numbers but when I hash built-in data types the hash value differs.
PC Python Interpreter (Python 2.7.3)
>>> hash(int)
31585118
>>> hash("hello sl4a")
1532079858
>>> hash(101)
101
Mobile Python Interpreter (Python 2.6.2)
>>> hash(int)
-2146549248
>>> hash("hello sl4a")
1532079858
>>> hash(101)
101
Can any one tell me is it a bug or I misunderstood something.
hash()
is randomised by default each time you start a new instance of recent versions (Python3.3+) to prevent dictionary insertion DOS attacks
Prior to that, hash()
was different for 32bit and 64bit builds anyway.
If you want something that does hash to the same thing every time, use one of the hashes in hashlib
>>> import hashlib
>>> hashlib.algorithms
('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')