Python列表清单

Pau*_* S. 4 python list

可能重复:
Python列表中的意外功能

我想在Python中列出一个列表,但显然这不起作用,因为更改一个数字会改变几个.为什么会这样,我该如何解决?

>>> a = [[0]*3]*4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

你发现的是一个经典的Python陷阱.

x = [0]*3是一个清单.没有问题,但[x]*4创建一个列表,其中包含4个完全相同列表的引用x.因此修改第一个元素x也会修改其他元素.

相反,如果你这样做:

In [193]: a = [[0]*3 for i in range(4)]
Run Code Online (Sandbox Code Playgroud)

那么你在列表中得到4个不同的项目:

In [194]: a[0][0] = 1

In [195]: a
Out[195]: [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)