यह is
काम करता है के साथ क्या करना है। यह मूल्य के बजाय संदर्भों की जांच करता है। यह True
देता है यदि तर्क एक ही वस्तु को सौंपा गया है।
इस मामले में, वे अलग-अलग उदाहरण हैं; float(0)
और float(0)
समान मूल्य ==
है, लेकिन जहां तक पाइथन का संबंध है, वे अलग-अलग इकाइयां हैं। सीपीथन कार्यान्वयन भी इस श्रेणी में सिंगलटन वस्तुओं के रूप में पूर्णांक को कैश करता है ->[x | एक्स ∈ ℤ ∧ -5 ≤ एक्स ≤ 256]:
>>> 0.0 is 0.0
True
>>> float(0) is float(0) # Not the same reference, unique instances.
False
इस उदाहरण में हम पूर्णांक कैशिंग सिद्धांत प्रदर्शित कर सकते हैं:
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
अब, तैरता float()
के लिए पारित कर रहे हैं, फ्लोट शाब्दिक बस वापस लौटाया जाता है (शॉर्ट सर्किट), जैसा कि एक ही संदर्भ में उपयोग किया जाता है, क्योंकि मौजूदा फ्लोट से एक नई फ्लोट को तुरंत चालू करने की आवश्यकता नहीं है:
>>> 0.0 is 0.0
True
>>> float(0.0) is float(0.0)
True
यह int()
भी उपयोग करके आगे का प्रदर्शन किया जा सकता है:
>>> int(256.0) is int(256.0) # Same reference, cached.
True
>>> int(257.0) is int(257.0) # Different references are returned, not cached.
False
>>> 257 is 257 # Same reference.
True
>>> 257.0 is 257.0 # Same reference. As @Martijn Pieters pointed out.
True
हालांकि, is
के परिणाम भी गुंजाइश उस में क्रियान्वित किया जा रहा है पर निर्भर हैं (इस सवाल की अवधि से परे /स्पष्टीकरण) , कृपया उपयोगकर्ता को देखें: @Jimcode objects पर शानदार स्पष्टीकरण। यहां तक कि अजगर के दस्तावेज़ इस व्यवहार पर एक खंड शामिल:
[7] स्वत: कचरा-संग्रह, नि: शुल्क सूचियों, और वर्णनकर्ता के गतिशील स्वभाव, आप कर सकते हैं के कारण is
ऑपरेटर के कुछ उपयोगों में प्रतीत होता है असामान्य व्यवहार, जैसे कि उदाहरण विधियों या स्थिरांक के बीच तुलना शामिल है। अधिक जानकारी के लिए अपने दस्तावेज की जांच करें।
संबंधित: http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python – Elazar
आपका प्रश्न उत्तर देने योग्य है, लेकिन यदि आप इस समस्या को पार करते हैं असली कोड, कोड शायद गलत है और तय किया जाना चाहिए। इस तरह से फ्लोट्स के बीच संदर्भ पहचान का परीक्षण करने के लिए लगभग (लगभग) कोई कारण नहीं है। – Elazar
अजीब बात यह है कि यद्यपि मैं इसे पुनः उत्पन्न कर सकता हूं, सभी आईडी (0.0) ',' आईडी (फ्लोट (0.0)) 'और' आईडी (फ्लोट (0)) 'वही मान वापस कर सकते हैं। ... यही है, मान वैसा ही है यदि मैं इंटरैक्टिव शैल में दूसरे के बाद निष्पादित करता हूं, लेकिन अगर मैं 'आईडी (फ्लोट (0.0)), आईडी (फ्लोट (0))' (एक टुपल के रूप में) तो आईडी अलग है। कोई स्पष्टीकरण? –