2017-03-03 7 views
1

python3で再帰を使用すると、 'f(a,b)'という関数があるとします( 'b'はリストです)。回帰的に回。もし 'f'の子インスタンスがリスト 'b'に何らかの変更を加えた場合、どのように 'b'の変更が呼び出し元の親fに反映されるのを避けるのですか? (私は 'b'を返していない)。 以下の私のコードを見てください。 2番目のelifでは、私は関数goToDepthへの2つの再帰呼び出しを行っています。呼び出されたインスタンスの1つが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モジュールを使用します(ただし、デザインが悪い可能性があります)。

関連する問題