यदि यह आपके कैशिंग के लिए केवल हेरिस्टिक है, तो बस जो भी काम करता है उसका उपयोग करें। Isinstance (एक्स, str), उदाहरण के लिए, लगभग बिल्कुल पसंद है। (आप कैश या नहीं तय करना चाहते हैं को देखते हुए, आप कुछ भी गलत नहीं करते एक झूठी उठाने वाले परीक्षण सिर्फ एक कैश याद आती है इसका मतलब है।)
(टिप्पणी: ऐसा लगता है कि बफर वस्तुओं hashable हैं , भले ही उनके स्ट्रिंग प्रतिनिधित्व अपने पैरों के नीचे बदल सकते हैं;। नीचे हैश चर्चा दिलचस्प है, लेकिन शुद्ध समाधान यह इरादा था नहीं है)
हालांकि, अच्छी तरह से लागू कक्षाओं उदाहरणों अगर वे hashable जा रहा है होना चाहिए अपरिवर्तनीय हैं और नहीं यदि वे उत्परिवर्तनीय हैं। एक सामान्य परीक्षा सफलता के लिए आपकी वस्तु और परीक्षण हैश होगा।
>>> hash({})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: dict objects are unhashable
इस झूठे सकारात्मक दे देंगे मुझे यकीन है, लेकिन hashable परिवर्तनशील वस्तुओं जा रहा है कड़ाई से एक अंतरफलक को तोड़ने है; मैं अजगर पुस्तकालय प्रकार इस इंटरफेस का पालन की उम्मीद करेंगे, एक छोटा सा नमूना का एक परीक्षण सही जवाब देता है:
hashabe: str (Immutable), buffer (Warning, immutable slice of (possibly) mutable object!)
unhashable: list, array.array
मैं आपको अपने प्रश्न का शीर्षक reword सलाह देते हैं। परिभाषा के अनुसार, पायथन में तार ('str' उदाहरण) ** ** ** म्यूटेबल नहीं हैं। स्ट्रिंग की तरह वस्तुओं, हालांकि हो सकता है। –
यह आपके प्रश्न का उत्तर नहीं देता है इसलिए मैं इसे एक टिप्पणी के रूप में पोस्ट कर रहा हूं: आपको प्रकार की तुलना करने के बजाय isinstance (s, basestring) का उपयोग करना चाहिए, इसलिए आप व्युत्पन्न कक्षाओं और यूनिकोड को अस्वीकार नहीं करते हैं। पायथन 3 में, isinstance (एस, str) का उपयोग करें। –
यदि तर्क उत्परिवर्तनीय है तो आप क्या कर रहे हैं? – bstpierre