2012-03-15 33 views

उत्तर

24

कुछ कारण हैं:

  • सूचियों की तरह परिवर्त्य वस्तुओं या शब्दकोश कुंजी के रूप में नहीं किया जा सकता पायथन में सदस्यों निर्धारित करते हैं, क्योंकि वे hashable नहीं हैं। यदि सूचियां __hash__ उनकी सामग्री के आधार पर विधियों को दी गई थीं, तो बदले गए मान बदल सकते हैं क्योंकि सामग्रियों में परिवर्तन होता है, जो हैश मानों के अनुबंध का उल्लंघन करता है।
  • यदि पायथन में केवल उत्परिवर्तनीय अनुक्रम थे, तो रचनाकारों ने अनुक्रमों को स्वीकार करने के लिए अक्सर उन्हें कॉपी करने की आवश्यकता होगी ताकि अनुक्रमों को अन्य कोड द्वारा संशोधित नहीं किया जा सके। कन्स्ट्रक्टर्स केवल टुपल्स स्वीकार करके रक्षात्मक प्रतिलिपि से बच सकते हैं। बेहतर अभी तक, वे tuple विधि के माध्यम से अनुक्रम तर्क पारित कर सकते हैं जो आवश्यक होने पर ही प्रतिलिपि बनाएगा।
+0

उनके हैश मान बदल सकते हैं? है ना? – wim

+2

wim -> सूची बदलते समय हैश वाउल्स बदलते हैं। यदि सूची में कहीं और रेफरी है तो सूची बदल सकती है। –

+0

सूची unhashable है। – wim

1

क्योंकि अन्यथा वहां एक अपरिवर्तनीय अनुक्रम प्रकार नहीं होगा! यदि आप एक परिवर्तनीय ट्यूपल चाहते हैं तो आप केवल एक सूची का उपयोग करें।

उचित प्रदर्शन के दौरान अपरिवर्तनीय प्रकारों का उपयोग करते समय, और आप आसानी से dict को टुपल कुंजियों के साथ आसानी से उपयोग नहीं कर पाएंगे, अगर उन्हें म्यूटेबल बनाया गया हो।