2013-02-16 60 views
1

我正在解決一些問題,並且遇到了這個問題。異常列表行爲

Python代碼

row=[] 
col=[] 
init=[-1,-1] 

現在我追加這個initrowcol

row.append(init) 
row.append(init) 

col.append(init) 
col.append(init) 

因此row = [[-1,-1],[-1,-1]]col = [[-1,-1],[-1,-1]]

現在,當我改變我的init[0] = 9row成爲col row = [[9,-1],[9,-1]]col = [[9,-1],[9,-1]]

+0

你可能要說,爲什麼你認爲這是不正常的,因爲這可能看起來正常的大多數Python程序員。 – wrgrs 2013-02-16 18:26:02

+1

@wrgrs我是一名Python程序員,雖然程序展現的行爲對我來說是完全正常的(預期的,甚至是),但我毫不費力地想象OP爲什麼認爲這種不正常(期待複製或更普遍的期望按價值撥打而不是通過分享撥打)。 – delnan 2013-02-16 18:28:54

回答

6

這是因爲你存儲相同的參照對象init一遍又一遍。所以當你修改對象時,每個人都可以看到它。

您可以嘗試使用append列表的副本。例如,一種方法可能是:

row.append(list(init)) 

有多種方法可以使用clone a list

+1

+1,儘管我認爲列表(init)對於新手來說不那麼神祕:) – slezica 2013-02-16 18:15:31

+0

同意,作爲解釋,'':''從列表的開頭到結尾都有一個片段,有效地複製它。 list()會更清晰地完成同樣的工作。 – 2013-02-16 18:16:31

+0

好電話,我編輯。 – cnicutar 2013-02-16 18:17:31