1

我正在解决一些问题并遇到了这个问题。

Python代码

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

现在我将它附加initrowand col

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

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

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

现在当我改变init[0] = 9我的rowcol成为 row = [[9,-1],[9,-1]]col = [[9,-1],[9,-1]]

4

2 回答 2

6

init发生这种情况是因为您一遍又一遍地存储对对象的相同引用。因此,当您修改对象时,每个人都会看到它。

您可以尝试appending 列表的副本。例如,一种方法可能是:

row.append(list(init))

克隆列表的方法不止一种。

于 2013-02-16T18:08:22.487 回答
1

这可能有助于解释原因

http://www.jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/

于 2013-02-16T18:16:17.290 回答