"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पुनरावृत्ति के दौरान पायथन डिक्शनरी को संशोधित करना आपदा का नुस्खा क्यों है?

पुनरावृत्ति के दौरान पायथन डिक्शनरी को संशोधित करना आपदा का नुस्खा क्यों है?

2024-11-09 को प्रकाशित
ब्राउज़ करें:613

Why is Modifying a Python Dictionary During Iteration a Recipe for Disaster?

पुनरावृत्ति करते समय एक पायथन शब्दकोश को संशोधित करना: एक गहरा गोता

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

पायथन शब्दकोश पर विचार करें। जब हम d.iteritems() का उपयोग करके इसे दोहराते हैं, तो हम अनिवार्य रूप से शब्दकोश की वस्तुओं का एक गतिशील दृश्य प्राप्त कर रहे होते हैं। पुनरावर्तक प्रत्येक कुंजी-मूल्य जोड़ी को क्रमिक रूप से लौटाता है।

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

प्रदान किए गए उदाहरण में, हम del d[f(k)] का उपयोग करके आइटम हटाते हैं और d[g(k) का उपयोग करके नए आइटम जोड़ते हैं। )] = v. हालांकि शब्दकोश में मौजूदा सूचकांकों पर मूल्य को संशोधित करना स्वीकार्य है, नए सूचकांकों में नए आइटम जोड़ना समस्याग्रस्त हो सकता है।

यह अच्छी तरह से परिभाषित क्यों नहीं है?

समस्या का स्रोत पुनरावृत्ति के अंतर्निहित तंत्र में निहित है। जब हम iteritems() का उपयोग करते हैं, तो हम शब्दकोश की एक प्रति के साथ काम नहीं कर रहे हैं। इसके बजाय, हम सीधे मूल शब्दकोश और उसकी वर्तमान सामग्री तक पहुँच रहे हैं। इस प्रकार, पुनरावृत्ति के दौरान शब्दकोश में किया गया कोई भी संशोधन अंतर्निहित संरचना को प्रभावित करता है और अप्रत्याशित व्यवहार को जन्म दे सकता है।

सुरक्षित विकल्प: पुनरावृत्त प्रतियों का उपयोग करना

सुरक्षित रूप से संशोधित करना एक शब्दकोश को उसके मदों पर पुनरावृत्ति करते समय, मूल के बजाय शब्दकोश की एक प्रति के साथ काम करने की अनुशंसा की जाती है। इसे d.copy().items() का उपयोग करके प्राप्त किया जा सकता है, जो मूल शब्दकोश की एक स्वतंत्र प्रतिलिपि बनाता है और पुनरावृत्ति के दौरान सुरक्षित संशोधन की अनुमति देता है।

एक प्रतिलिपि के साथ काम करके, हम यह सुनिश्चित करते हैं कि अंतर्निहित मूल शब्दकोश की संरचना में कोई बदलाव नहीं किया गया है, भले ही पुनरावृत्ति के दौरान नए आइटम जोड़े जाएं या मौजूदा हटा दिए जाएं। यह दृष्टिकोण मूल शब्दकोश की अखंडता को बनाए रखता है और संभावित त्रुटियों से बचाता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3