2016-03-27 27 views
0

Sorun, megaNode'un deepcopy() kullanılarak newMegaNode'a bağımsız bir kopyasını oluşturamıyorum. Bunu kullandıktan sonra bile yeniMeganode ve megaNode birbirine bağlanmış görünüyor. Bu konuda yanlış bir şey yapıyorum? Çıktısında, içeriğimi newMegaNode'a kopyalamak ve newList'e eklemek için özel olarak deepcopy() kullansam da her şey megaNoda'ya bağlanır.deepCopy kullanarak Python'da bağımsız nesne oluşturma

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

bakmak var kullanıcı sınıflarının nesneleri üzerinde 'deepcopy' kullanarak sorunlar olabilir. Bunun nedeni, kurucuların ('__init__') genellikle sınıf değişkenlerini ayarlamak veya güncellemek gibi diğer yan etkilere sahip olmasından dolayı, kurucu çağırmadan yeni bir nesne oluşturmak tehlikeli olabilir. Sınıf bunu önlemek için bir '__deepcopy__' kullanabilir, ancak çok az şey yapabilir. – cdarke

cevap

0

Bazen, sınıf tanımındaki "object" öğesinden miras almazsanız, python 2.x içinde sınıf davranışı kafa karıştırıcı olur. Eğer değilseniz piton sürüm 2.x, sınıfından böyle "nesne" den devralan emin olun: Ben AnswersAlgo` ne `hiçbir fikrim yok, ama

class megaNode(object): 
    ... 

Ayrıca this post

İlgili konular