我的代码:
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)
问题是,当我在递归中打印要添加时,就可以了。但是,在遍历列表之后,将其追加到该列表之后; 答案,它显示的值与我将其附加到列表时显示的值不同。递归中的值是正确的,但是递归后整个列表 answers 被破坏了。是什么原因造成的?这让我发疯,任何帮助将不胜感激。
答案 0 :(得分:1)
原因是.copy()
提取了dynamicmatrix
的浅表副本,这意味着副本中也引用了矩阵中的嵌套列表,以及您对这些嵌套列表进行的任何后续更改也会影响复制。
例如,以下分配将影响您已经附加到answer
的内容:
dynamicmatrix[row][col] = chartofind
解决方案:
使用deepcopy
:
import copy
toadd = copy.deepcopy(dynamicmatrix)
或使用列表推导明确地制作更深的副本:
toadd = [row[:] for row in dynamicmatrix]