可能重复:
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)
你发现的是一个经典的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)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |