我的代码:matrix = []dynamicmatrix = []answers = []...some other code...def search(chartofind, row): global dynamicmatrix print("SEARCHING", chartofind, row) if row == numberofrows: toadd = dynamicmatrix.copy() answers.append(toadd) return for col in range(0, numberofrows): if canPlace(chartofind, row, col) == False and matrix[row][col] != chartofind: continue if matrix[row][col] == chartofind: search(chartofind, row+1) else: dynamicmatrix[row][col] = chartofind search(chartofind, row+1) dynamicmatrix[row][col] = matrix[row][col]search("A", 0) for i in answers: print(i)问题是当我在递归中打印toadd时,它很好。但是,在遍历列表后,它被附加到;answers,它显示的值与我将它附加到列表时显示的值不同。递归中的值是正确的,但在递归之后整个列表答案都被破坏了。这可能是什么原因造成的?这让我发疯,任何帮助将不胜感激。
1 回答

繁花如伊
TA贡献2012条经验 获得超12个赞
原因是它.copy()
采用 的浅拷贝dynamicmatrix
,这意味着矩阵中的嵌套列表也在副本中被引用,并且您对这些嵌套列表所做的任何后续更改也会影响副本。
例如,以下分配将影响您已附加到的内容answer
:
dynamicmatrix[row][col] = chartofind
解决方案:
使用deepcopy
:
import copy toadd = copy.deepcopy(dynamicmatrix)
或者使用列表理解来明确地制作更深的副本:
toadd = [row[:] for row in dynamicmatrix]
添加回答
举报
0/150
提交
取消