2013-02-16 51 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