Why and how are Python functions hashable?
So start with the question i.e. Why and how are Python functions hashable? First, one should know what actually hashable means in Python. So, hashable is a feature of Python objects that tells if the object has a hash value or not. If the object has a hash value then it can be used as a key for a dictionary or as an element in a set.
An object is hashable if it has a hash value that does not change during its entire lifetime. Python has a built-in hash method ( __hash__() ) that can be compared to other objects. For comparing it needs __eq__() or __cmp__() method and if the hashable objects are equal then they have the same hash value. All immutable built-in objects in Python are hashable like tuples while the mutable containers like lists and dictionaries are not hashable.
Objects which are instances of the user-defined class are hashable by default, they all compare unequal, and their hash value is their id().
Example: Consider two tuples t1, t2 with the same values, and see the differences:
Python3
t1 = ( 1 , 5 , 6 )
t2 = ( 1 , 5 , 6 )
print ( id (t1))
print ( id (t2))
|
Output:
140040984150664
140040984150880
In the above example, two objects are different as for immutable types the hash value depends on the data stored not on their id.
Example: Let’s see lambda functions are hashable or not.
Python3
l = lambda x : 1
print ( hash (l))
print ( id (l))
print (l.__hash__())
|
Output:
-9223363246992694337
140637793303544
-9223363246992694337
Hence, lambda functions are hashable.
Example: Let’s see user defined def based function are hashable or not.
Python3
def fun():
pass
print ( type (fun))
print (fun.__hash__())
print ( hash (fun))
|
Output:
<class 'function'>
-9223363242199589441
-9223363242199589441
Therefore, any user defined function is hashable as its hash value remains same during its lifetime.
Last Updated :
31 Aug, 2020
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...