न केवल यह पसंदीदा तरीका है, यह एकमात्र उचित तरीका है। क्योंकि स्ट्रिंग्स अपरिवर्तनीय हैं, स्ट्रिंग से किसी char को "निकालने" के लिए आपको एक अलग स्ट्रिंग मान जब भी एक नई स्ट्रिंग बनाना होता है।
आप सोच रहे होंगे कि तार क्यों अपरिवर्तनीय हैं, बशर्ते कि जब भी आप कोई चरित्र बदलते हैं तो आपको एक पूरी नई स्ट्रिंग बनाना होगा। आखिरकार, सी स्ट्रिंग सिर्फ वर्णों के सरणी हैं और इस प्रकार उत्परिवर्तनीय हैं, और कुछ भाषाएं जो सी से अधिक स्पष्ट रूप से तारों का समर्थन करती हैं, उत्परिवर्तनीय तारों को भी अनुमति देती हैं। अपरिवर्तनीय तार रखने के दो कारण हैं: सुरक्षा/सुरक्षा और प्रदर्शन।
स्ट्रिंग्स को अपरिवर्तनीय होने का शायद सबसे महत्वपूर्ण कारण सुरक्षा है। जब तार अपरिवर्तनीय होते हैं, तो आप कुछ लाइब्रेरी में एक स्ट्रिंग पास नहीं कर सकते हैं और उसके बाद उस स्ट्रिंग को अपने पैरों के नीचे से बदलना चाहिए जब आप इसकी अपेक्षा नहीं करते हैं। आप सोच सकते हैं कि कौन सी लाइब्रेरी स्ट्रिंग पैरामीटर बदल जाएगी, लेकिन यदि आप क्लाइंट को कोड भेज रहे हैं तो आप मानक लाइब्रेरी के अपने संस्करणों को नियंत्रित नहीं कर सकते हैं, और दुर्भावनापूर्ण क्लाइंट आपके प्रोग्राम को तोड़ने और अधिक जानने के लिए अपने मानक पुस्तकालयों को बदल सकते हैं इसके आंतरिक के बारे में। अपरिवर्तनीय वस्तुओं के बारे में तर्क करना भी आसान है, जो वास्तव में महत्वपूर्ण है जब आप यह साबित करने का प्रयास करते हैं कि आपका सिस्टम विशेष खतरों के खिलाफ सुरक्षित है। तर्क की यह आसानी थ्रेड सुरक्षा के लिए विशेष रूप से महत्वपूर्ण है, क्योंकि अपरिवर्तनीय वस्तुएं स्वचालित रूप से थ्रेड-सुरक्षित होती हैं।
प्रदर्शन आश्चर्यजनक रूप से अपरिवर्तनीय तारों के लिए बेहतर है। जब भी आप एक स्ट्रिंग का टुकड़ा लेते हैं, तो पाइथन रनटाइम केवल मूल स्ट्रिंग पर एक दृश्य रखता है, इसलिए कोई नया स्ट्रिंग आवंटन नहीं होता है। चूंकि स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए आपको प्रतिलिपि बनाने के बिना कॉपी सेमेन्टिक्स मिलते हैं, जो वास्तविक प्रदर्शन जीत है।
एरिक लिपर्ट स्ट्रिंग्स के अपरिवर्तनीय (सी # में, पायथन नहीं) here के पीछे तर्क के बारे में और बताता है।
स्रोत
2012-03-09 19:24:39
मैंने जोड़ने की कोशिश की, यह नहीं पता कि यह क्यों काम नहीं करता है। –
यह वास्तव में इस बात पर निर्भर करता है कि आप क्या करने का प्रयास कर रहे हैं और कोड को अनुकूलित करना कितना महत्वपूर्ण है। मुझे लगता है कि ज्यादातर मामलों में बस एक और प्रकार बनाने या सूची का उपयोग करने के बजाय, एक नई स्ट्रिंग को प्राथमिकता दी जाती है। – dave
यदि आपको इसे अक्सर करना है, तो अपने एल्गोरिदम पर पुनर्विचार करें। – delnan