在代码中使用Python中的嵌套列表时,我遇到了一些问题。基本上,我有一个包含所有0值的2D列表,我想在一个循环中更新列表值。然而,Python并没有产生我想要的结果。有什么我误解的吗range()Python列表索引呢?some_list = 4 * [(4 * [0])]for i in range(3):
for j in range(3):
some_list[i+1][j+1] = 1for i in range(4):
print(some_list[i])我预期的结果是:[0, 0, 0, 0][0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1]但是Python的实际结果是:[0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1][0, 1, 1, 1]这里发生了什么事?嵌套列表索引
2 回答

慕婉清6462132
TA贡献1804条经验 获得超2个赞
In [151]: some_list = 4 * [(4 * [0])] In [152]: [id(x) for x in some_list]Out[152]: [148641452, 148641452, 148641452, 148641452]In [160]: some_list[0][1]=5 #you think you changed the list at index 0 hereIn [161]: some_listOut[161]: [[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]] #but all lists are changed
In [156]: some_list=[[0]*4 for _ in range(4)]In [157]: some_listOut[157]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]In [158]: [id(x) for x in some_list]Out[158]: [148255436, 148695180, 148258380, 148255852]In [163]: some_list[0][1]=5In [164]: some_listOut[164]: [[0, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] #works fine in this case
添加回答
举报
0/150
提交
取消