มีการกล่าวถึงวัตถุว่าสามารถแฮชได้หากมีค่าแฮชที่ยังคงเหมือนเดิมตลอดอายุการใช้งาน มันมีเมธอด __hash__() และสามารถเปรียบเทียบกับอ็อบเจ็กต์อื่นได้ สำหรับสิ่งนี้ มันต้องการเมธอด __eq__() หรือ __cmp__() หากเปรียบเทียบวัตถุที่แฮชได้จะเท่ากัน ก็จะมีค่าแฮชเท่ากัน
ความสามารถในการแฮชได้ทำให้ออบเจ็กต์สามารถใช้เป็นคีย์พจนานุกรมและเป็นสมาชิกชุดได้ เนื่องจากโครงสร้างข้อมูลเหล่านี้ใช้ค่าแฮชภายใน
ออบเจ็กต์ในตัวที่ไม่เปลี่ยนรูปทั้งหมดใน python สามารถแฮชได้ คอนเทนเนอร์ที่เปลี่ยนแปลงได้ เช่น รายการและพจนานุกรมจะไม่สามารถแฮชได้ ในขณะที่คอนเทนเนอร์ทูเพิลที่ไม่เปลี่ยนรูปนั้นสามารถแฮชได้
ออบเจ็กต์ที่เป็นอินสแตนซ์ของคลาสที่ผู้ใช้กำหนดสามารถแฮชได้โดยค่าเริ่มต้น พวกเขาทั้งหมดเปรียบเทียบไม่เท่ากัน (ยกเว้นกับตัวเอง) และค่าแฮชได้มาจาก 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
นี่แสดงว่าฟังก์ชันใดๆ สามารถแฮชได้ เนื่องจากมีค่าแฮชที่ยังคงเหมือนเดิมตลอดอายุการใช้งาน