एक ऑब्जेक्ट को हैशेबल कहा जाता है यदि इसका एक हैश मान होता है जो इसके जीवनकाल के दौरान समान रहता है। इसमें __hash__() मेथड होता है और इसकी तुलना अन्य ऑब्जेक्ट्स से की जा सकती है। इसके लिए, इसे __eq__() या __cmp__() मेथड की आवश्यकता होती है। यदि हैशेबल ऑब्जेक्ट्स तुलना में समान हैं, तो उनका हैश मान समान होता है।
हैशेबल होने से एक ऑब्जेक्ट डिक्शनरी कुंजी और सेट सदस्य के रूप में उपयोग करने योग्य हो जाता है क्योंकि ये डेटा संरचनाएं आंतरिक रूप से हैश मानों का उपयोग करती हैं।
पायथन में सभी इम्यूटेबल बिल्ट-इन ऑब्जेक्ट्स हैशेबल हैं। म्यूटेबल कंटेनर्स जैसे सूचियाँ और डिक्शनरी हैशेबल नहीं हैं जबकि इम्यूटेबल कंटेनर टपल हैशेबल है।
यूज़र-डिफाइंड क्लासेस के इंस्टेंस डिफ़ॉल्ट रूप से हैशेबल होते हैं; वे सभी असमान तुलना करते हैं (स्वयं को छोड़कर), और उनका हैश मान उनके id() से प्राप्त होता है।
हैश स्पष्ट रूप से फंक्शन की ID नहीं है: दिए गए लैम्ब्डा फंक्शन पर विचार करें।
उदाहरण
m = lambda x: 1 print hash(m) print id(m) print m.__hash__()
आउटपुट
1265925722 3074942372 1265925722
यह दर्शाता है कि लैम्ब्डा फंक्शन्स हैशेबल हैं।
उदाहरण
अब दिए गए फंक्शन f() पर विचार करें:
def f():pass print type(f) print f.__hash__() print hash(f)
आउटपुट
<type 'function'> 1265925978 1265925978
यह दर्शाता है कि कोई भी फंक्शन हैशेबल है क्योंकि इसका एक हैश मान होता है जो इसके जीवनकाल में समान रहता है।