जब हम तत्वों के संग्रह (collections) के साथ काम करते हैं—जैसे स्ट्रिंग्स की लिस्ट या ट्यूपल्स की लिस्ट—तो संग्रह में किसी तत्व की तलाश करना या यह जानना कि “क्या X नामक आइटम हमारे संग्रह में है?” जैसी क्वेरी का जवाब देना गणनात्मक रूप से काफी महंगा हो सकता है। वहीं, संख्याओं की तुलना करना बहुत तेज़ होता है, और हमारे कंप्यूटर विशेष रूप से संख्याओं की तुलना कुशलता से करने में माहिर हैं (स्ट्रिंग या ट्यूपल की तरह नहीं)। ऐसे में, यदि हम अपने पास मौजूद डेटा को किसी संख्यात्मक मान में परिवर्तित कर पाएँ, तो उसे खोजना या यह जाँचना कि वह संग्रह में मौजूद है या नहीं, काफी तेज़ हो जाएगा।
किसी भी आकार के डेटा को स्थाई आकार (fixed-size) के डेटा में बदलने की तकनीक को हैशिंग (hashing) कहते हैं। परिणामी संख्या (हैश) मूल डेटा के लिए एक अद्वितीय पहचानकर्ता का काम करती है। आम तौर पर हमारे पास एक हैश फ़ंक्शन (hash function) होता है, जो प्रारंभिक डेटा को एक निश्चित आकार के डेटा (जैसे किसी संख्या) में बदल सकता है।
उदाहरण के लिए, Python में एक इनबिल्ट (built-in) hash फ़ंक्शन है, जो किसी भी अपरिवर्तनीय (immutable) ऑब्जेक्ट को, आम तौर पर रेंज के भीतर आने वाली किसी संख्या में बदल सकता है। ध्यान रहे, यह सिर्फ़ अपरिवर्तनीय ऑब्जेक्ट्स पर काम कर सकता है। इसलिए, किसी लिस्ट या डिक्शनरी (जो परिवर्तनीय यानी mutable होते हैं) को हैश करने की कोशिश करने पर निम्न त्रुटि आती है: