"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > `dict.fromkeys()` पायथन में साझा परिवर्तनशील ऑब्जेक्ट क्यों बनाता है?

`dict.fromkeys()` पायथन में साझा परिवर्तनशील ऑब्जेक्ट क्यों बनाता है?

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

 Why does `dict.fromkeys()` create shared mutable objects in Python?

शब्दकोश निर्माण और परिवर्तनशील वस्तुएं: 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