2015-06-17 194 views
0

我只是遇到了這個錯誤:爲什麼有A = A +之間的差異B和A + = B

def fn_that_uses_a_list(list): 
    if (list[-1] < 0): list += [0] 
    for item in list: 
    print(item) 

l = [-4, -2] 
fn_that_uses_a_list(l) 
# Now suddenly l has three items. 

但是,如果我改變list += [0]list = list + [0],那麼事情的工作。我覺得這很讓人困惑,但這可能是因爲我是Python新手。

爲什麼這種情況有所不同?我正在尋找一個更生動的答案,而不是「list是一個參考,所以+=修改原來的」

我在做一些「非pythonic」,這使我碰到了錯誤?

+3

您的預期行爲是什麼?你不想讓列表在函數後有三個項目嗎? – syntonym

+0

這裏有什麼問題! –

+0

@syntonym No.我在功能期間暫時需要一個包含三個項目的清單。在調用函數後,我仍然需要原始列表保持不變... – Soumya

回答

0

不知道你在做什麼,如果我同時使用list += [0]list = list + [0],我會得到相同的結果。

也就是說,+=變異列表,而+創建一個新的列表。請嘗試:

def fn_that_uses_a_list(list): 
    if (list[-1] < 0): 
    print id(list) 
    list += [0] 
    # list = list + [0] 
    print id(list) 
    for item in list: 
    print(item) 

l = [-4, -2] 
fn_that_uses_a_list(l) 
+0

我認爲這個打算並不是說'印刷品'的印刷方式不同,但是列表的變化發生了。 – syntonym

相關問題