একটি অবজেক্ট হ্যাশেবল হলে তার হ্যাশ ভ্যালু তার লাইফটাইম ধরে একই থাকে এবং সেটি অন্য অবজেক্টের সাথে তুলনা করা যায় (__hash__() এবং __eq__() মেথড থাকতে হয়)। হ্যাশেবল অবজেক্ট ডিকশনারির কী বা সেটের মেম্বার হিসেবে ব্যবহার করা যায়।
পাইথন ফাংশন হ্যাশেবল কেন?
- ফাংশন অবজেক্ট ইমিউটেবল (তারা একবার তৈরি হলে তাদের কোড/বডি পরিবর্তন হয় না)।
- পাইথন সব ফাংশন অবজেক্টের জন্য
__hash__()মেথড প্রদান করে। - হ্যাশ ভ্যালু সাধারণত অবজেক্টের
id()থেকে উদ্ভূত হয়, কিন্তু ল্যাম্বডা ফাংশনের ক্ষেত্রে ভিন্ন হতে পারে।
উদাহরণ
# ল্যাম্বডা ফাংশন m = lambda x: 1 print(hash(m)) # 1265925722 print(id(m)) # 3074942372 (ভিন্ন) print(m.__hash__()) # 1265925722 # সাধারণ ফাংশন def f(): pass print(type(f)) #print(f.__hash__()) # 1265925978 print(hash(f)) # 1265925978
ব্যাখ্যা
- দুইটি ফাংশন অবজেক্টের হ্যাশ ভ্যালু একই হলে সেগুলো সমান (
==)। - ফাংশন অবজেক্ট ডিকশনারির কী বা সেটে রাখা যায়।
- বিল্ট-ইন ইমিউটেবল টাইপ (int, str, tuple) হ্যাশেবল; মিউটেবল (list, dict) হ্যাশেবল নয়।