在Python中附加到2D列表

我遇到了我认为是Python中一个奇怪的行为,如果可能的话,我希望有人解释它。

我创build了一个空的2D列表

listy = [[]]*3 print listy [[], [], []] 

以下工作如我所料:

listy[1] = [1,2] yield [[], [1,2], []]

listy[1].append(3) yield [[], [1,2,3], []]

但是,当我追加到一个空列表时,python追加到所有的子列表中,如下所示:

listy[2].append(1)得到[[1], [1,2,3], [1]]

任何人都可以向我解释为什么会出现这种情况

您还没有创build三个不同的空列表。 您已经创build了一个空列表,然后创build了一个新列表,其中包含三个对同一个空列表的引用。 要解决这个问题,请使用下面的代码:

 listy = [[] for i in range(3)] 

运行您的示例代码现在给出您可能预期的结果:

 >>> listy = [[] for i in range(3)] >>> listy[1] = [1,2] >>> listy [[], [1, 2], []] >>> listy[1].append(3) >>> listy [[], [1, 2, 3], []] >>> listy[2].append(1) >>> listy [[], [1, 2, 3], [1]] 

[[]]*3[[], [], []]

就好像你说的

 a = [] listy = [a, a, a] 

换句话说,所有三个列表引用引用相同的列表实例。