我无法弄清楚为什么我的输入参数(电路板)在循环中发生了变化..
def iterate从def init中获取列表“board”。它应该这样做一次,我检查过,它只是调用def启动一次。问题发生在循环“for i in range(0,size()):”in def iterate。这里,列表“old_board”以某种方式改变。如果我在列表“old_board”中有5轮和5个列表,则第二轮更改old_board [1]的值,依此类推。为什么会发生这种情况?我该如何解决?
(循环中的参数列表和列表应该相等)
这是输出:
“这是参数列表:[[1,1,0,1,0],[1,1,1,0,1],[0,0,1,1,1],[1, 1,0,1,1],[1,0,0,1,0]]
这是循环中的列表:[[1,1,0,1,0],[1,1,1,0,1],[0,0,1,1,1],[1] ,1,0,1,1],[1,0,0,1,0]]
这是循环中的列表:[[0,0,0,1,0],[1,1,1,0,1],[0,0,1,1,1],[1 ,1,0,1,1],[1,0,0,1,0]]
这是循环中的列表:[[0,0,0,1,0],[1,1,0,0,0],[0,0,1,1,1],[1 ,1,0,1,1],[1,0,0,1,0]]
这是循环中的列表:[[0,0,0,1,0],[1,1,0,0,0],[0,0,0,1,0],[1 ,1,0,1,1],[1,0,0,1,0]]
这是循环中的列表:[[0,0,0,1,0],[1,1,0,0,0],[0,0,0,1,0],[1 ,1,0,1,0],[1,0,0,1,0]]“
这是代码:
def iterate(board):
old_board = board
print('This is the parameter list :',old_board)
new_board = board
living = 0 # Value of alive cells in the future new board
for i in range(0,size()): # Nestled loop that iterate through the old board
print('This is the list in the loop:',old_board)
for j in range(0,size()): # and sets new values depending on the status of each old cell
new_value = living_neighbors(i,j,old_board)[1]
new_board[i][j] = new_value
living += new_value
print(new_board)
print(living)
return (living, new_board)
iterate(initiate()[0])
答案 0 :(得分:1)
在这里,您不复制列表,只需创建一个指向现有列表的新链接
old_board = board
print('This is the parameter list :',old_board)
new_board = board
如果你需要它的副本,你应该这样做:
old_board = board[:]
print('This is the parameter list :',old_board)
new_board = board[:]
请参阅FAQ
答案 1 :(得分:0)
通过这样做
old_board = board
new_board = board
您不会创建新对象,而只会创建对现有对象的新引用。 您可以使用复制模块或Alex建议的语法来创建新对象。
from copy import deepcopy
old_board = deepcopy(board)
您可在此处找到详细说明: http://www.python-course.eu/deep_copy.php