A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.geeksforgeeks.org/python/why-and-how-are-python-functions-hashable/ below:

Why and how are Python functions hashable?

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.



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4