दिलचस्प पोस्ट
सशक्त API सेवा स्विफ्ट – एकाधिक मानदंड वाले ऑब्जेक्ट्स को सॉर्ट करें एक चर में पाइप उपप्रक्रिया मानक आउटपुट मैं जावा गेम्स में कचरा संग्रह देरी से कैसे बच सकता हूं? (सर्वोत्तम अभ्यास) कोणीय UI- राउटर कैसे एक "लेआउट" स्थिति बनाने के लिए? Boost.Spirit के साथ एक साधारण पार्सर संकलित मैं कैसे जांच करूं कि क्या जीसीसी पूंछ-रीक्रियन अनुकूलन कर रहा है? एंड्रॉइड – फायरबेज क्विकर्ट ईमेल / पासवर्ड एथेट डेमो काम नहीं करता है 1 या 0 की लगातार बिट स्ट्रिंग ढूंढना स्केलैर्न: रेखीय रेग्रेसियन.फिल्म () को फोन करते समय नमूनों की असंगत संख्याओं के साथ मिला सरणी जावा – इसे पढ़ने पर ओवरराइटिंग द्वारा टेक्स्ट फ़ाइल से लाइन हटाएं $ (इस) चयनकर्ता के बच्चों को कैसे प्राप्त करें? क्या सरल शब्दों में कोई मुझे संभव हो सकता है यदि संभव हो तो उदाहरण के साथ आगंतुक पैटर्न का उद्देश्य Mediastore से यूआरआइ से फाइल नाम और पथ प्राप्त करें एक स्ट्रिंग के लिए एक SimpleXML ऑब्जेक्ट को मजबूर करते हुए, चाहे संदर्भ के

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

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

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

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

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

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

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

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

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

नहीं, केवल इंटरप्रीटर का अनुकूलन करने का निर्णय लिया गया है, जो एक नीति के आधार पर निर्णय है जो भाषा विनिर्देशन का हिस्सा नहीं है और जो अलग-अलग 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 एक ही व्यवहार है।

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