शब्दकोश निर्माण और परिवर्तनशील वस्तुएं: fromkeys के साथ आश्चर्यजनक व्यवहार
पायथन में dict.fromkeys() का उपयोग करके शब्दकोश बनाते समय, एक अप्रत्याशित स्थिति हो सकती है तब उत्पन्न होते हैं जब परिवर्तनशील वस्तुओं को मूल्यों के रूप में नियोजित किया जाता है। निम्नलिखित उदाहरण पर विचार करें:
xs = dict.fromkeys(range(2), [])
xs[0].append(1)
print(xs)
शब्दकोश कुंजी 0 और 1 के मान के रूप में दो अलग-अलग सूची ऑब्जेक्ट बनाने के बावजूद, इंडेक्स 0 पर सूची में एक तत्व जोड़ने से यह इंडेक्स 1 की सूची में भी जुड़ जाता है। ऐसा इसलिए होता है क्योंकि fromkeys बाइंड हो जाता है परिवर्तनशील वस्तु के समान संदर्भ के लिए प्रत्येक कुंजी, जिसके परिणामस्वरूप साझा संशोधन होते हैं। रेंज में i के लिए(2)} xs[0].जोड़ें(1) print(xs)
यहां, प्रत्येक कुंजी एक अलग सूची ऑब्जेक्ट से बंधी है। सूचकांक 0 पर सूची में एक तत्व जोड़ने से सूचकांक 1 पर सूची प्रभावित नहीं होती है।
xs = {i: [] for i in range(2)}
xs[0].append(1)
print(xs)
fromkeys के व्यवहार को इस पर विचार करके समझा जा सकता है निम्नलिखित समतुल्य कोड:a = [] xs = dict.fromkeys(range(2), a)
परिणामी शब्दकोश में प्रत्येक कुंजी एक ही वस्तु को संदर्भित करती है, जिससे देखे गए साझा संशोधन होते हैं।
a = []
xs = dict.fromkeys(range(2), a)
xs = dict((i, []) for मैं रेंज में(2))
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3