दिलचस्प पोस्ट
एसबीक के लिए आरबीएआर बनाम सेट आधारित प्रोग्रामिंग फ़्रेम को HTML में क्यों नहीं छोड़ा गया है? सी शेल में stdout को stderr को पुनर्निर्देशित करें पर्ल में एएससीआईआई समकक्षों को अक्षरों, उम्लॉट्स आदि के साथ अक्षरों को कैसे रूपांतरित करना है? क्या हर्डोप जॉब बनाने के लिए मानचित्रित या मैप्रेडिड पैकेज का उपयोग करना बेहतर है? आपके होस्ट मशीन में सॉफ़्टवेयर द्वारा एक स्थापित कनेक्शन निरस्त कर दिया गया था C ++ में सी हेडर का प्रयोग करते समय, क्या हमें std :: या global namespace से फ़ंक्शन का उपयोग करना चाहिए? अंतिम पत्र रंग बदलें "यह ऐप चाहूंगा: ऑफ़लाइन पहुंच" जब access_type = online आंशिक दृश्य प्रस्तुत करना ASP.NET MVC में jQuery का उपयोग करना स्विफ्ट में html को पार्स करने के लिए सबसे अच्छा अभ्यास क्या है? एएसपी.नेट में फ़ाइलों को स्ट्रीम करने का सर्वोत्तम तरीका मुझे किस बात का पता चल सकता है कि किसने बल को गिट में धकेल दिया? रूबी में क्या () करता है? RTSP का उपयोग करते हुए वीडियो स्ट्रीमिंग: एंड्रॉइड

अजगर: क्यों करता है ("हैलो" हैलो है) सच का मूल्यांकन क्यों करता है?

"hello" is "hello" == True क्यों है? "hello" is "hello" == True पायथन में "hello" is "hello" == True है?

मैं यहाँ निम्नलिखित पढ़ें:

यदि दो स्ट्रिंग लीटरल समान हैं, तो उन्हें एक ही मेमोरी स्थान पर रखा गया है। एक स्ट्रिंग एक अपरिवर्तनीय इकाई है। कोई नुकसान नहीं किया जा सकता है।

तो क्या प्रत्येक पायथन स्ट्रिंग के लिए मेमोरी में एक और केवल एक जगह है? बहुत अजीब लगता है यहाँ क्या चल रहा है?

Solutions Collecting From Web of "अजगर: क्यों करता है ("हैलो" हैलो है) सच का मूल्यांकन क्यों करता है?"

पायथन (जैसे जावा, सी, सी ++, .नेट) स्ट्रिंग पूलिंग / इंटर्निंग का उपयोग करता है। दुभाषिया को पता चलता है कि "नमस्ते" "नमस्ते" के समान है, इसलिए यह स्मृति में समान स्थान का अनुकूलन करता है और इसका उपयोग करता है।

एक और गुडी: "नरक" + "ओ" है "हैलो" ==> सच है

तो क्या प्रत्येक पायथन स्ट्रिंग के लिए मेमोरी में एक और केवल एक जगह है?

नहीं, केवल इंटरप्रीटर का अनुकूलन करने का निर्णय लिया गया है, जो एक नीति के आधार पर निर्णय है जो भाषा विनिर्देशन का हिस्सा नहीं है और जो अलग-अलग CPython संस्करणों में बदल सकता है।

जैसे। मेरे संस्थापना पर (2.6.2 लिनक्स):

 >>> 'X'*10 is 'X'*10 True >>> 'X'*30 is 'X'*30 False 

इसी तरह के लिए ints:

 >>> 2**8 is 2**8 True >>> 2**9 is 2**9 False 

इसलिए 'स्ट्रिंग' पर भरोसा मत करो 'स्ट्रिंग': यहां तक ​​कि सी के कार्यान्वयन को देखकर यह सुरक्षित नहीं है।

शाब्दिक स्ट्रिंग्स शायद उनके हश या कुछ इसी प्रकार के आधार पर समूहबद्ध हैं। उसी शाब्दिक तारों में से दो समान स्मृति में संग्रहित किए जाएंगे, और कोई संदर्भ दोनों उस संदर्भ में होंगे।

  Memory Code ------- | myLine = "hello" | / |hello < | \ | myLine = "hello" ------- 

ऑपरेटर रिटर्न सही है अगर दोनों तर्क एक ही ऑब्जेक्ट हैं। आपका परिणाम इसका एक परिणाम है, और उद्धृत बिट

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

पायथन इंटरप्रेटर / कंपाइलर स्ट्रिंग लीटरल्स को पार्स करता है, अर्थात वर्णों की उद्धृत सूची जब ऐसा होता है, तो यह "मैंने पहले यह स्ट्रिंग देखी है" का पता लगा सकता है, और पिछली बार के रूप में उसी प्रतिनिधित्व का उपयोग कर सकता है। यह ऐसा कर सकता है क्योंकि यह जानता है कि इस तरह परिभाषित स्ट्रिंग को बदला नहीं जा सकता।

यह अजीब क्यों है यदि स्ट्रिंग अपरिवर्तनीय है, तो यह केवल एक बार इसे स्टोर करने के लिए बहुत सारी भावनाएं बनाता है। .NET एक ही व्यवहार है।

मुझे लगता है कि यदि कोई दो चर (न सिर्फ स्ट्रिंग्स) में एक ही मान होता है, तो मान दो बार न केवल एक बार संग्रहीत किया जाएगा और दोनों ही चर उसी स्थान पर इंगित करेंगे। यह मेमोरी बचाता है