The hash()
method returns the hash value of an object if it has one. Hash values are just integers that are used to compare dictionary keys during a dictionary look quickly.
Example
text = 'Python Programming' # compute the hash value of text hash_value = hash(text) print(hash_value) # Output: -966697084172663693
hash() Syntax
The syntax of hash()
method is:
hash(object)
hash() Parameters
The hash()
method takes a single parameter:
- object - the object whose hash value is to be returned (integer, string, float)
hash() Return Value
The hash()
method returns the hash value of an object.
Example 1: How hash() works in Python?
# hash for integer unchanged print('Hash for 181 is:', hash(181)) # hash for decimal print('Hash for 181.23 is:',hash(181.23)) # hash for string print('Hash for Python is:', hash('Python'))
Output
Hash for 181 is: 181 Hash for 181.23 is: 530343892119126197 Hash for Python is: 2230730083538390373
Example 2: hash() for immutable tuple object?
hash()
method only works for immutable objects as tuple.
# tuple of vowels vowels = ('a', 'e', 'i', 'o', 'u') print('The hash is:', hash(vowels))
Output
The hash is: -695778075465126279
How does hash() work for custom objects?
As stated above, hash()
method internally calls __hash__()
method. So, any objects can override __hash__()
for custom hash values.
But for correct hash implementation, __hash__()
should always return an integer. And, both __eq__()
and __hash__()
methods have to be implemented.
Below are the cases for correct __hash__()
override.
__eq__() | __hash__() | Description |
---|---|---|
Defined (by default) | Defined (by default) | If left as is, all objects compare unequal (except themselves) |
(If mutable) Defined | Should not be defined | Implementation of hashable collection requires key's hash value be immutable |
Not defined | Should not be defined | If __eq__() isn't defined, __hash__() should not be defined. |
Defined | Not defined | Class instances will not be usable as hashable collection. __hash__() implicity set to None . Raises TypeError exception if tried to retrieve the hash. |
Defined | Retain from Parent | __hash__ = <ParentClass>.__hash__ |
Defined | Doesn't want to hash | __hash__ = None . Raises TypeError exception if tried to retrieve the hash. |
Example 3: hash() for Custom Objects by overriding __hash__()
class Person: def __init__(self, age, name): self.age = age self.name = name def __eq__(self, other): return self.age == other.age and self.name == other.name def __hash__(self): print('The hash is:') return hash((self.age, self.name)) person = Person(23, 'Adam') print(hash(person))
Output
The hash is: 3785419240612877014
Also Read: