दिलचस्प पोस्ट
कैसे PHP में उत्पन्न कई arrays में आइटम के सभी संयोजन Htaccess के साथ एक विशेष निर्देशिका के लिए सभी बॉट / क्रॉलर्स / मकड़ियों को ब्लॉक करें सी ++ में मुझे फ़ॉर्मेटमैसेज () ठीक से कैसे उपयोग करना चाहिए? नोड। जेएस धाराओं से निपटने में त्रुटि getElementsByTagName () textNodes के बराबर है विंडोज स्टार्टअप पर जावा एप्लीकेशन चलाएं मैं अपने टेम्पलेट के बिना किसी भी MySQL तालिका में सभी डुप्लिकेट रिकॉर्ड कैसे हटाऊं? Jquery का उपयोग कर एक div के अंदर केवल पाठ को बदलें एएसपी.एनटी कोर 1.0 वेब एपीआई में त्रुटि संभालने में त्रुटि (क्लाइंट को पूर्व। मेसेज भेजा जा रहा है) स्थिर फ़ाइलों को सेवा देने के लिए ASP.NET रूटिंग का उपयोग करना PHPUnit के साथ संरक्षित विधियों का परीक्षण करने के लिए सर्वोत्तम प्रथाएं एक DLL से आयात लायब्रेरी (LIB-file) कैसे उत्पन्न करें? क्या सीमके को एक ही पुस्तकालय के एक स्थैतिक और साझा संस्करण का निर्माण करना संभव है? सेवा में $ HTTP प्रतिसाद प्रसंस्करण MYSQL या बनाम प्रदर्शन में

पायथन सूची भ्रम

मान लें कि मेरे पास निम्न कोड है:

a_list = [[0]*10]*10 

यह निम्न सूची बनाता है:

 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 

फिर मैं पहली सूची में पहला तत्व संशोधित करना चाहता हूं:

 a_list[0][0] = 23 

मुझे केवल सूची के पहले तत्व को संशोधित करने की उम्मीद है, लेकिन वास्तव में प्रत्येक सूची का पहला तत्व बदल गया था:

 [[23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0], [23, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 

मैं इस से बचने के लिए अपने डेटा का प्रतिनिधित्व करने के लिए एक और रास्ता खोज रहा था लेकिन ऐसा क्यों हो रहा है? सिर्फ पहली सूची क्यों नहीं बदली गई है? जब मैं दूसरा *10 करता हूं, तो क्या पायथन वास्तव में एक नई स्मृति ब्लॉक आवंटित करने के बजाय पहली सूची के पते की प्रतिलिपि बनाता है?

वेब के समाधान से एकत्रित समाधान "पायथन सूची भ्रम"

प्रतिलिपि पते के बारे में आपका कूड़ा सही है इसके बारे में कुछ इस तरह सोचें:

 sub_list = [0] * 10 a_list = [sub_list] * 10 

यह कोड आपके द्वारा ऊपर लिखे गए कोड के बराबर है। इसका क्या मतलब यह है कि आप वास्तव में एक ही सूची sub_list बदल रहे हैं जब भी आप sub_list कोई भी तत्व बदलते हैं आप इसे टाइप करके भी सुनिश्चित कर सकते हैं:

 a_list = [[0] * 10] * 10 for n in a_list: print id(n) 

और यह प्रत्येक तत्व के लिए समान दिखाई देगा। इसका समाधान करने के लिए, आपको इसका उपयोग करना चाहिए:

 a_list = [[0] * 10 for _ in range(10)] 

a_list प्रत्येक तत्व के लिए एक नया a_list बनाने के लिए

सूचियों में वस्तुओं के संदर्भ होते हैं सूचियों पर गुणा केवल संदर्भ को दोहराता है (वही वस्तुओं में!)। हालांकि यह अपरिवर्तनीय वस्तुओं (जैसे पूर्णांक) के लिए ठीक है, वही सूची प्राप्त करने के लिए आपको क्या मिल रहा है

इस पैटर्न [[0]*10 for _ in xrange(10)] साथ अलग सूचियां बनाएं।

सिर्फ पहली सूची क्यों नहीं बदली गई है?

कारण सरल है, वास्तव में केवल 1 सूची है, न कि 10 – जैसा कि आप पहले से ही संदेह करते हैं:

 In [1]: [[0]*10]*10 Out[1]: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] In [2]: map(id, _) Out[2]: [54094624, 54094624, 54094624, 54094624, 54094624, 54094624, 54094624, 54094624, 54094624, 54094624] 

यदि आप 10 सूचियां बनाना चाहते हैं, तो आप इसे आसानी से प्राप्त कर सकते हैं जैसे अभिव्यक्ति के द्वारा

 [[0]*10 for x in xrange(10)]