2016-03-27 15 views
0

問題deepcopy()を使用してnewMegaNodeにmegaNodeの独立したコピーを作成できません。それを使った後でさえ、newMeganodeとmegaNodeは結合されているようです。私はこれで何か間違っているのですか?私が特にdeepcopy()を使ってコンテンツをnewMegaNodeにコピーしてnewListに追加したにもかかわらず、出力ではすべてがmegaNodaにバインドされます。deepCopyを使用してPythonで独立したオブジェクトを作成する

def newAlgo(): 
     global nodeQueue 
     initalNode = AnswersAlgo(); 
     scratchList = [] 
     scratchList.append(initalNode) 

     newList = [] 
     for node in nodeQueue: 

      for megaNode in scratchList: 
       if validation(node,megaNode): 
        newMegaNode = copy.deepcopy(megaNode) #Unable to create independent object 
        newList.append([node,newMegaNode]) 


     for x,y in newList:  
      scratchList.append(y.addToList(x)) 
+1

を見てみましょうユーザクラスのオブジェクトに対して 'deepcopy'を使うことで問題になる可能性があります。コンストラクタ( '__init__')には、クラス変数の設定や更新などの副作用があることが多いため、コンストラクタを呼び出さずに新しいオブジェクトを作成すると危険です。クラスはこれを避けるために '__decopy__'を実装できますが、ほとんど行いません。 – cdarke

答えて

0

時にはPython 2.xでは、クラス定義で "object"を継承しないと、クラスの動作が混乱します。あなたはPythonのバージョンであれば2.xでは、あなたのクラスは、このような「オブジェクト」から継承することを確認している。

class megaNode(object): 
    ... 

はまた、私はAnswersAlgo`が何であるか `見当がつかないが、そこthis post

関連する問題