পাইথনের প্রাথমিক ডেটা স্ট্রাকচারগুলির মধ্যে একটি হ'ল অভিধান, যা কোনও ধরণের "মান" সন্ধানের জন্য "কী" রেকর্ড করতে দেয়। এটি কি হ্যাশ টেবিল হিসাবে অভ্যন্তরীণভাবে প্রয়োগ করা হয়েছে? যদি না হয়, এটা কি?
পাইথনের প্রাথমিক ডেটা স্ট্রাকচারগুলির মধ্যে একটি হ'ল অভিধান, যা কোনও ধরণের "মান" সন্ধানের জন্য "কী" রেকর্ড করতে দেয়। এটি কি হ্যাশ টেবিল হিসাবে অভ্যন্তরীণভাবে প্রয়োগ করা হয়েছে? যদি না হয়, এটা কি?
উত্তর:
হ্যাঁ, এটি হ্যাশ ম্যাপিং বা হ্যাশ টেবিল। যেমন, টিম পিটার্স দ্বারা লিখিত আপনি পাইথন এর অভি বাস্তবায়ন একটি বিবরণ পড়তে পারেন এখানে ।
এজন্য আপনি কোনও তালিকার মতো ডিক কী হিসাবে 'হ্যাশেবল নয়' এমন কিছু ব্যবহার করতে পারবেন না:
>>> a = {}
>>> b = ['some', 'list']
>>> hash(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list objects are unhashable
>>> a[b] = 'some'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list objects are unhashable
আপনি হ্যাশ টেবিলগুলি সম্পর্কে আরও পড়তে পারেন বা কীভাবে অজগরটিতে এটি প্রয়োগ করা হয়েছে এবং কেন সেভাবে প্রয়োগ করা হয় তা পরীক্ষা করতে পারেন ।
.keys()
কীগুলির একটি তালিকা পুনরুদ্ধার করতে পারে। একটি আসল হ্যাশ টেবিলটি কীগুলি সঞ্চয় করে না, কেবল স্থান বাঁচানোর জন্য হ্যাশগুলি রাখে।
হ্যাশ () তে টেবিল দেখার চেয়ে পাইথন অভিধানে আরও কিছু থাকতে হবে। নিষ্ঠুর পরীক্ষা-নিরীক্ষার মাধ্যমে আমি এই হ্যাশের সংঘর্ষের বিষয়টি পেয়েছি :
>>> hash(1.1)
2040142438
>>> hash(4504.1)
2040142438
তবুও এটি অভিধান ভাঙে না:
>>> d = { 1.1: 'a', 4504.1: 'b' }
>>> d[1.1]
'a'
>>> d[4504.1]
'b'
বৈধতা পরীক্ষা:
>>> for k,v in d.items(): print(hash(k))
2040142438
2040142438
সম্ভবত হ্যাশ () এর বাইরে অন্য দেখার স্তর রয়েছে যা অভিধান কীগুলির মধ্যে সংঘর্ষ এড়ায়। অথবা ডিক () একটি ভিন্ন হ্যাশ ব্যবহার করে।
(উপায় দ্বারা, এই পাইথন 2.7.10 হবে। একই সময়ে একটি সংঘর্ষের সঙ্গে পাইথন 3.4.3 এবং 3.5.0 গল্প hash(1.1) == hash(214748749.8)
।)
hash('I wandered lonely as a cloud, that drifts on high o\'er vales and hills, when all at once, I saw a crowd, a host of golden daffodils.')
এটি একটি 19-সংখ্যার দশমিক দেয় - -4037225020714749784
যদি আপনি যত্নের পক্ষে যথেষ্ট বুদ্ধিমান হন। বাচ্চাদের নিজের কথায় চালিয়ে যান, এবং হ্যাশটি এখনও 19-সংখ্যার নম্বর। আমি ধরে নিই যে পাইথনে আপনি স্ট্রিংয়ের দৈর্ঘ্যের সীমাবদ্ধতা রাখতে পারেন তবে সম্ভাব্য মানের চেয়ে আরও অনেকগুলি সম্ভাব্য স্ট্রিং বলা নিরাপদ। এবং hash(False)
= 0 উপায় দ্বারা।
হ্যাঁ. অভ্যন্তরীণভাবে এটি জেড / 2 ( উত্স ) এর ওপরে আদিম বহুবর্ষের ভিত্তিতে ওপেন হ্যাশিং হিসাবে প্রয়োগ করা হয় ।
নসক্লোোর ব্যাখ্যাটি প্রসারিত করতে:
a = {}
b = ['some', 'list']
a[b] = 'some' # this won't work
a[tuple(b)] = 'some' # this will, same as a['some', 'list']
dict
বাস্তবায়নের অভ্যন্তরীণ বিষয়গুলি নিয়ে আলোচনা করে ।