Strange behaviour when appending items to lists inside dictionaries in python -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब

मेरे पास एक शब्दकोश अनुक्रमित है 201 पूर्णांक कुंजी (0..200) इनमें से प्रत्येक कुंजी के लिए मान एक सूची है। नीचे दिए गए कोड से उत्पन्न:

  शब्द = dict.fromkeys (range201, [])  

जब मैं आइटम संलग्न करने की कोशिश करता हूं तो मुझे यह अजीब व्यवहार मिल रहा है यदि मैं ऐसा करता हूं:

  शब्दकोष [1] .append ("foo")  

मैं यह उम्मीद करता हूं :

  & gt; & gt; शब्दकोश {0: [], 1: ["foo"], 2: [], ...}  

लेकिन इसके बजाय मैं इसके साथ समाप्त होता है:

  & gt; शब्दकोश> {0: ["foo"], 1: ["foo"], 2: ["foo"], .. ।}  

एक संदर्भ को थोड़ा स्पष्ट करने के लिए जो ऑपरेशन किया जाता है, मैं उन मानों की एक सूची को एन्यूमरेट कर रहा हूं जो None या float < / कोड>, मैं कोई भी नहीं छोड़ना चाहता हूँ और float को सूचीबद्ध करने के लिए सूची में जोड़ना चाहता हूं:

  i के लिए, मूल्य मानना ​​(मान सूची): यदि मान नहीं है: जारी रखें शब्दकोश [i] .append (value)  

यह व्यवहार स्वतंत्र है जो कि पूर्णांक सूचकांक का उपयोग करता है, और मैं अंत सभी सूचकांकों पर समान मूल्यों के साथ मैं सूचियों की एक सूची का उपयोग कर सकता हूं और मुझे लगता है कि एक ही परिणाम प्राप्त कर सकता है। लेकिन मैं इस व्यवहार को समझना चाहता था।

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

इसके बजाय इसे आज़माएं:

 < कोड> शब्दकोश = {} श्रेणी के लिए (201): # लूप सूची बनाते हैं .__ init __ () (यानी []) 200 बार शब्दकोश [i] = [] शब्दकोष [1] कहा जाता है .append ("foo ") प्रिंट शब्दकोश  

Comments

Popular posts from this blog

mysql - How to enter php data into a html multiple select box -

java - Can't add JTree to JPanel of a JInternalFrame -

c++ - Cassandra datastax cpp driver - avoiding unnecessary copies -