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: