Why and how are Python functions hashable?
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.
Similar Reads
Whirlpool Hash Function in Python Hash Function is a function which has a huge role in making a System Secure as it converts normal data given to it as an irregular value of fixed length. We can imagine it to be a Shaker in our homes. When we put data into this function it outputs an irregular value. The Irregular value it outputs i
2 min read
Passing function as an argument in Python In Python, functions are first-class objects meaning they can be assigned to variables, passed as arguments and returned from other functions. This enables higher-order functions, decorators and lambda expressions. By passing a function as an argument, we can modify a functionâs behavior dynamically
5 min read
Why does Python code run faster in a function? Python, renowned for its simplicity and readability, has some interesting performance characteristics that might not be immediately obvious to beginners. One such characteristic is that code often runs faster when it's inside a function. This behavior can be puzzling at first, but it becomes clear w
4 min read
dir() function in Python The dir() function is a built-in Python tool used to list the attributes (like methods, variables, etc.) of an object. It helps inspect modules, classes, functions, and even user-defined objects during development and debugging.Syntaxdir([object])Parameters: object (optional): Any Python object (lik
3 min read
Higher Order Functions in Python In Python, Higher Order Functions (HOFs) play an important role in functional programming and allow for writing more modular, reusable and readable code. A Higher-Order Function is a function that either:Takes another function as an argumentReturns a function as a resultExample:Pythondef greet(func)
5 min read