首页 > 解决方案 > 无法获得嵌套数组初始化工作?

问题描述

我对这种行为感到困惑

r,c = (5,2)
slist = [[0]*c]*r
print(slist)

for i in range(r):
    slist[i][0] = i
print(slist)

输出是

[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
[[4, 0], [4, 0], [4, 0], [4, 0], [4, 0]]

标签: pythonpython-3.x

解决方案


当您这样做时[[0] * c] * r,您将创建一个列表,其中每个元素都是对同一列表的引用。所以,当你改变一个时,它们都会改变。使用带有范围的列表推导来创建唯一列表:

slist = [[0] * c for _ in range(r)]

请参阅此处了解更多信息。


推荐阅读