2015-10-21 10 views
8

अगर मैं एक अजगर दुभाषिया में निम्न कोड चलाएँ:"वस्तु .__ dict__ वस्तु क्यों है .__ dict__" गलत?

>>> object.__dict__ is object.__dict__ 
False 

परिणाम False क्यों है?

+3

क्योंकि आपको 'dict_proxy' ऑब्जेक्ट मिलता है, जिसे हर बार '__dict__' विशेषता तक पहुंचने के लिए फिर से बनाया जाता है और केवल' ऑब्जेक्ट 'के साथ गड़बड़ करने से रोकने के लिए केवल पढ़ने के लिए होता है। – jonrsharpe

उत्तर

7

object.__dict__, अन्य __dict__ रों के विपरीत, एक mappingproxy वस्तु (अजगर 2 में एक dict_proxy) देता है। ये फ्लाई पर बनाए गए हैं जब __dict__ अनुरोध किया गया है। इसलिए नतीजतन, जब भी आप object.__dict__ तक पहुंचते हैं तो आपको एक नई प्रॉक्सी मिलती है। वे सभी एक ही अंतर्निहित वस्तु को प्रॉक्सी करते हैं, लेकिन प्रॉक्सी हर समय एक ताजा है। यही कारण है कि आप दो समान नहीं प्राप्त कर सकते हैं।

+0

कहा जा रहा है, '{' foo ':' bar '} {' foo ':' bar '}' 'गलत 'प्रतीत होता है, यह भी ... यह एक व्यापक श्रद्धा व्यवहार नहीं है, कुछ विशिष्ट नहीं है 'वस्तु .__ dict__'? – DreadPirateShawn

+0

धन्यवाद, यह मैपिंगप्रैक्सी क्यों कैश नहीं किया जा सकता है और फिर पुन: उपयोग नहीं किया जा सकता है? – NathaneilCapital

+2

@DreadPirateShawn ऐसा इसलिए है क्योंकि आप * दो अलग-अलग शब्दकोश * बना रहे हैं। 'डी = {'foo': 'bar'}; डी डी डी व्यवहार करेगा जैसा आप उम्मीद करते हैं। – jonrsharpe

संबंधित मुद्दे