Skip to content
Related Articles

Related Articles

Improve Article

Why and how are Python functions hashable?

  • Difficulty Level : Easy
  • Last Updated : 31 Aug, 2020

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)
 
# show the id of object
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




# create a one-line function
l = lambda x : 1
 
# show the hash value
print(hash(l))
 
# show the id value
print(id(l))
 
# show the hash value
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






# create an empty function
def fun():
  pass
 
# print types of function
print(type(fun))
 
# print hash value
print(fun.__hash__())
 
# print hash value
print(hash(fun))

 
 

Output:

 

<class 'function'>
-9223363242199589441
-9223363242199589441 

 

Therefore, any user defined function is hashable as its hash value remains same during its lifetime.

 

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course




My Personal Notes arrow_drop_up
Recommended Articles
Page :