2010-07-02 10 views
8
A = [[]]*2 

A[0].append("a") 
A[1].append("b") 

B = [[], []] 

B[0].append("a") 
B[1].append("b") 

print "A: "+ str(A) 
print "B: "+ str(B) 

पैदावार:[[]] * 2 अजगर में क्या करता है?

A: [['a', 'b'], ['a', 'b']] 
B: [['a'], ['b']] 

एक उम्मीद होती है कि एक सूची बी सूची के रूप में ही हो सकता है, यह नहीं मामला है, दोनों कथनों संलग्न एक [0] और एक [1 करने के लिए लागू किया गया ]।

क्यों?

+0

वहाँ एक बहुत अच्छा इस सूत्र में सूची के लिए पायथन के * ऑपरेटर की व्याख्या दी गई है: http://stackoverflow.com/questions/974931/multiply-operator-applied-to-listdata-structure –

+7

@S। लॉट: यह मेरे लिए काफी स्पष्ट लगता है: दो बहुत ही समान रूप, [[]] * 2 और [[], []] उसी तरह से संचालित होने पर बहुत अलग परिणाम प्राप्त करते हैं। क्यूं कर? –

उत्तर

16

A = [[]]*2 2 समान तत्वों के साथ एक सूची बनाता है: [[],[]]। तत्व एक ही सटीक सूची हैं। तो

A[0].append("a") 
A[1].append("b") 

दोनों "a" और "b" एक ही सूची में जोड़ देता है।

B = [[], []] 2 विशिष्ट तत्वों के साथ एक सूची बनाता है।

In [220]: A=[[]]*2 

In [221]: A 
Out[221]: [[], []] 

यह दिखाता है कि A के दो घटकों को समान हैं:

In [223]: id(A[0])==id(A[1]) 
Out[223]: True 

In [224]: B=[[],[]] 

यह दिखाता है कि B के दो घटकों को विभिन्न वस्तुओं रहे हैं।

In [225]: id(B[0])==id(B[1]) 
Out[225]: False 
संबंधित मुद्दे