2013-04-18 74 views
0

爲什麼當我嘗試將目標設置爲數組元素時,解包的行爲會發生變化?Python:解壓縮到數組元素中

>>> def foobar(): return (1,2) 
>>> a,b = foobar() 
>>> (a,b) 
(1, 2) 
>>> a = b = [0, 0] # Make a and b lists 
>>> a[0], b[0] = foobar() 
>>> (a, b) 
([2, 0], [2, 0]) 

在第一種情況下,我得到了我期望的行爲。在第二種情況下,兩個賦值都使用返回的元組中的最後一個值(即'2')。爲什麼?

+0

拆包並沒有改變的行爲,你是做多分配在第二個例子,不拆包 – jamylak 2013-04-18 03:13:43

回答

3

當你做a = b = [0, 0],你讓兩個ab指向相同名單。因爲它們是可變的,所以如果你改變了,你就改變它們。使用這個來代替:

a, b = [0, 0], [0, 0] 
+0

謝謝,波動,對於這個建議。 – 2013-04-18 03:00:22

2

a = b = [0, 0]#使得a和b的相同列表

+0

gnibbler,你打我太吧。 :)我剛剛意識到我的愚蠢,並回到刪除問題,你已經回答。感謝您的及時回覆。 – 2013-04-18 02:59:54