在递归中附加到列表的问题

我的代码:


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,它显示的值与我将它附加到列表时显示的值不同。递归中的值是正确的,但在递归之后整个列表答案都被破坏了。这可能是什么原因造成的?这让我发疯,任何帮助将不胜感激。


白猪掌柜的
浏览 200回答 1
1回答

繁花如伊

原因是它.copy()采用 的浅拷贝dynamicmatrix,这意味着矩阵中的嵌套列表也在副本中被引用,并且您对这些嵌套列表所做的任何后续更改也会影响副本。例如,以下分配将影响您已附加到的内容answer:dynamicmatrix[row][col] = chartofind解决方案:使用deepcopy:import copy toadd = copy.deepcopy(dynamicmatrix)或者使用列表理解来明确地制作更深的副本:toadd = [row[:] for row in dynamicmatrix]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python