2017-03-03 140 views
1

当在python3中使用递归时,假设我有一个函数'f(a,b)'('b'是列表)并且在'f'中我调用'f'几个次递归。如果'f'的女儿实例对列表'b'进行了一些更改,如何避免'b'中的这些更改反映在调用父级f中? (我不回'B')。 例如看看我的代码如下。在第二个elif中,我正在对函数goToDepth进行两次递归调用。如果其中一个被调用的实例更改为depthArr,则该更改将反映在调用函数depthArr的副本中,这也是我不想要的。如何避免这种情况? 非常感谢!Python3递归,避免变量的变化,以反映全局在不同的递归调用

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 

回答

1

尝试传递清单的副本:a[:]创建浅拷贝。

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