Python3递归,避免变量更改以在不同的递归调用中全局反映

Python3递归,避免变量更改以在不同的递归调用中全局反映,python,python-3.x,recursion,Python,Python 3.x,Recursion,在python3中使用递归时,假设我有一个函数“f(a,b)”(“b”是list),在“f”中我递归调用了“f”。如果“f”的子实例对列表“b”进行了一些更改,如何避免“b”中的这些更改反映在调用父实例f中?(我不返回“b”)。 例如,请查看下面我的代码。在第二个elif中,我对函数goToDepth进行了两次递归调用。如果一个被调用实例对depthArr进行了更改,那么该更改也会反映在调用函数的depthArr副本中,我不希望看到该副本。如何避免这种情况? 提前多谢 def goToDepth

在python3中使用递归时,假设我有一个函数“
f(a,b)
”(“b”是list),在“f”中我递归调用了“f”。如果“f”的子实例对列表“b”进行了一些更改,如何避免“b”中的这些更改反映在调用父实例f中?(我不返回“b”)。 例如,请查看下面我的代码。在第二个elif中,我对函数
goToDepth
进行了两次递归调用。如果一个被调用实例对
depthArr
进行了更改,那么该更改也会反映在调用函数的
depthArr
副本中,我不希望看到该副本。如何避免这种情况? 提前多谢

def goToDepth(headNode,depthArr):
    if(headNode==None):
        return
    elif(not depthArr):
        return
    elif(depthArr[-1]!=1):
        depthArr[-1]=depthArr[-1]-1
        goToDepth(headNode.left,depthArr)
        goToDepth(headNode.right,depthArr)
    elif (depthArr[-1]==1):    
        headNode.left,headNode.right=headNode.right,headNode.left
        depthArr.pop()
        goToDepth(headNode.left,depthArr)
        goToDepth(headNode.right,depthArr)
    else:
        return

尝试传递列表的副本:
a[:]
创建浅层副本

使用
copy
模块创建深度副本(但这可能是糟糕的设计)