【发布时间】:2022-01-08 01:09:55
【问题描述】:
Python 版本:3.9.5
我的代码:
cells = [[i, i] for i in range(3)]
steps = []
for t in range(2):
for i in range(len(cells)):
xrand = random.randint(-5, 5)
yrand = random.randint(-5, 5)
cells[i][0] += xrand
cells[i][1] += yrand
steps.append(list(cells))
print(steps)
实际输出:
[[[3, 3], [2, 3], [6, 3]]]
[[[4, 7], [-3, 2], [8, 3]], [[4, 7], [-3, 2], [8, 3]]]
预期输出:
[[[3, 3], [2, 3], [6, 3]]]
[[[3, 3], [2, 3], [6, 3]], [[4, 7], [-3, 2], [8, 3]]]
我每次都在外部循环中更改列表 cells 的值,并将修改后的列表附加到 steps 列表中。正如您在输出中看到的那样,在第二次迭代中,cells 的第一个元素也被修改了,即使我只是将一个元素附加到列表中。
steps 的第一个元素是上一次迭代的cells 列表。但是在第二次迭代中,两个元素都会动态变化,即使我只是附加一个元素,所以第一个元素不应该受到影响。
为什么会发生这种情况以及如何克服?
【问题讨论】:
标签: python python-3.x list dynamic