为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2021-07-07 13:14:18
我的代码: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]


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号