একটি বস্তুকে হ্যাশেবল বলা হয় যদি এর একটি হ্যাশ মান থাকে যা তার জীবদ্দশায় একই থাকে। এটির একটি __hash__() পদ্ধতি রয়েছে এবং এটি অন্যান্য বস্তুর সাথে তুলনা করা যেতে পারে। এর জন্য, এটির প্রয়োজন __eq__() বা __cmp__() পদ্ধতি। যদি তুলনা করার সময় হ্যাশযোগ্য বস্তু সমান হয়, তাহলে তাদের একই হ্যাশ মান থাকে।
হ্যাশেবল হওয়ার ফলে একটি ডিকশনারি কী এবং একটি সেট মেম্বার হিসেবে ব্যবহারযোগ্য বস্তুকে রেন্ডার করে কারণ এই ডেটা স্ট্রাকচার অভ্যন্তরীণভাবে হ্যাশ মান ব্যবহার করে।
পাইথনে সমস্ত অপরিবর্তনীয় অন্তর্নির্মিত বস্তু হ্যাশেবল। পরিবর্তনযোগ্য কন্টেইনার যেমন তালিকা এবং অভিধানগুলি হ্যাশযোগ্য নয় যখন অপরিবর্তনীয় কন্টেইনার টিপল হ্যাশেবল হয়
অবজেক্ট যা ব্যবহারকারী-সংজ্ঞায়িত ক্লাসের উদাহরণ ডিফল্টরূপে হ্যাশেবল; তারা সবাই অসম তুলনা করে (নিজেদের সাথে ছাড়া), এবং তাদের হ্যাশ মান তাদের 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
এটি দেখায় যে যেকোন ফাংশন হ্যাশেবল কারণ এটির একটি হ্যাশ মান রয়েছে যা তার জীবনকাল ধরে একই থাকে৷