0

可能重复:
Python 列表索引

result=[range(3)]*2
for i in range(len(result)):
    result[i][2]=4*i
print result

我希望[[0, 1, 0], [0, 1, 4]]

为什么我会得到[[0, 1, 4], [0, 1, 4]]

谢谢!

4

2 回答 2

0
  • 列表“结果”是:[[0, 1, 2], [0, 1, 2]]
  • 你的迭代是:“for i in range(len(result))”
  • len(结果)是:2
  • 范围(2)是:[0,1]

意义:

第一次:结果[0][2]=4*0

第二次:结果[1][2]=4*1

这会给你结果 [[0, 1, 4], [0, 1, 4]]

这就是一步一步做的事情。

如果您在迭代中添加“中断”,您会看到结果是 [[0, 1, 0], [0, 1, 0]]

“结果”列表通过参考起作用。当它被调用时,它指向同一个对象。

于 2013-01-29T16:41:40.877 回答
0

当您这样做时[range(3)] * 2,它会创建一个列表,其中包含对同一列表的两个引用,因此修改result[0]result[1]每个都修改两者。

用于[range(3) for i in range(2)]制作一个包含两个不同结果的列表range(3)

于 2013-01-29T16:35:12.373 回答