2009-12-24 15 views

उत्तर

14

इस डिजाइन के द्वारा होता है प्रिंट करता है। जब आप किसी सूची के तत्वों पर गुणा का उपयोग करते हैं, तो आप संदर्भों को पुन: उत्पन्न कर रहे हैं।

the section "List creation shortcuts" on the Python Programming/Lists wikibook देखें जो म्यूटेबल ऑब्जेक्ट्स के सूची संदर्भों के साथ मुद्दों पर विस्तार से जाता है।

>>> s = [[0]*3 for i in range(2)] 
>>> s 
[[0, 0, 0], [0, 0, 0]] 
>>> s[0][1] = 1 
>>> s 
[[0, 1, 0], [0, 0, 0]] 
6

इसमें कुछ समय शैतानी, लेकिन काफी स्पष्ट है, जब आप समझते हैं कि आप क्या कर रहे हैं:

उनकी सिफारिश की वैकल्पिक हल एक सूची समझ है। जब आप [[0]*3]*2 बिट कर रहे हैं, तो आप पहले 3 शून्य के साथ एक सूची बना रहे हैं, फिर आप इसे दो तत्व बनाने के लिए प्रतिलिपि बनाते हैं। लेकिन जब आप उस प्रतिलिपि करते हैं, तो आप एक ही सामग्री के साथ नई सूचियां नहीं बनाते हैं, बल्कि कई बार एक ही सूची का संदर्भ देते हैं। तो जब आप एक बदलते हैं, तो वे सभी बदल जाते हैं।

एक उदाहरण यह उजागर करने के लिए:

In [49]: s = [[]]*2 # Create two empty lists 

In [50]: s # See: 
Out[50]: [[], []] 

In [51]: s[0].append(2) # Alter the first element (or so we think) 

In [52]: s # OH MY, they both changed! (because they're the same list!) 
Out[52]: [[2], [2]] 
संबंधित मुद्दे