सेट और शब्दकोशों हैश तालिकाओं का उपयोग लागू होते हैं। वे अनियंत्रित संग्रह हैं, जिसका अर्थ है कि उनके पास कोई गारंटीकृत आदेश नहीं है।
जो ऑर्डर आप देख रहे हैं वह एक गैर-गारंटीकृत कार्यान्वयन विवरण है। कार्यान्वयन विस्तार पूर्णांकों का कारण बनता है
>>> [hash(i) for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
जो आपके सेट के आदेश दिए प्रस्तुत की जाएगी: CPython में, एक पूर्णांक के लिए हैश मान पूर्णांक ही है। अन्य सेट अर्ध-आदेशित होंगे, {5, 6, 7, 8, 9}
set([8, 9, 5, 6, 7])
के रूप में प्रकट होता है।
इसके विपरीत, अन्य डेटाटाइप जैसे str में विभिन्न हैश फ़ंक्शन हैं और अधिक स्कैम्बल दिखाई देंगे। उदाहरण के लिए:
# Example of scrambling str objects in a 64-bit build
>>> {'red', 'green', 'blue'}
set(['blue', 'green', 'red'])
set.pop विधि प्रविष्टियों बाएँ-से-सही बंद दिखाई नहीं देता। यह एक गैर-गारंटीकृत कार्यान्वयन विस्तार भी है।
आपके प्रश्न का संक्षिप्त उत्तर हाँ है, ऑर्डरिंग मनमानी है लेकिन नहीं, जो आपने देखा वह सिर्फ एक संयोग नहीं था, बल्कि यह एक दिलचस्प गैर-गारंटीकृत कार्यान्वयन विस्तार था।
आशा इस को साफ करता है-अप आप के लिए रहस्य :-)
इस हैश समारोह है कि एक सेट यह स्मृति में स्थानों के लिए सामग्री है मैप करने के लिए उपयोग करता है के साथ क्या करना है। विभिन्न डेटा प्रकारों पर 'हैश() 'करने का प्रयास करें और देखें कि आपको कौन सी संख्याएं मिलती हैं। एक सेट _will_ से बाहर निकला हुआ arbritrary संख्या सेट में _next_ तत्व हो। ऐसा ही होता है कि डेटा को सेट करने वाला "आदेश" डेटा को तब तक आदेशित नहीं किया जा सकता है जब तक आप चिंतित हों। इस उदाहरण में, आदेश है कि तत्व हैशैप को संग्रहीत/पुनर्प्राप्त करने के क्रम के साथ मेल खाता है। –
मुझे आज भी वही चीज़ मिली और मैं आपका प्रश्न उठाना चाहता हूं –