理解Python中的递归和堆栈

理解Python中的递归和堆栈,python,recursion,stack,sudoku,Python,Recursion,Stack,Sudoku,我正在用Python开发一个数独解算器 def backtrack(puzzle): x,y,candidates=findSquare(puzzle) if x==-1 and y==-1: return puzzle #stop condition while len(candidates[x][y])>0: puzzle[x][y]=candidates[x][y].pop() puzzler=backtrack

我正在用Python开发一个数独解算器

def backtrack(puzzle):
    x,y,candidates=findSquare(puzzle)
    if x==-1 and y==-1:
        return puzzle #stop condition
    while len(candidates[x][y])>0:
        puzzle[x][y]=candidates[x][y].pop()
        puzzler=backtrack(puzzle)
        if isValid(puzzler):
            return puzzler
    return False
这是一个基本的猜测算法。当一个猜测错误时,它将转到下一个猜测(while循环)

我遇到的问题是变量难题,数独难题。当猜测错误时,while循环将转到下一个候选对象。变量之谜现在包括由递归的进一步步骤所做的修改,即使这些步骤是错误的猜测。我不明白这一点,其他变量对于每个递归堆栈都是唯一的,不应该保持不变


请不要犹豫,要求更多的解释

拼图变量是一个列表。我的猜测是,由于浅拷贝,每个函数回溯都使用相同的谜题(内存中的相同位置)。 下面是关于Python中浅拷贝与深拷贝的一个很好的答案。

更具体地说,问题可能就在这条线上 拼图者=回溯(拼图)
我会尝试创建一个益智游戏的深度副本,并将其交给递归

谢谢,先生。深度复制改变了一切。puzzler=backtrack(copy.deepcopy(puzzle))是解决方案,谢谢。