2013-10-02 98 views
0

我做了一個包含一個類的實例的列表,每個實例都有一個空列表作爲屬性。我試圖在我的腳本的每次迭代中追加這些列表中的一個,並且相反所有這些列表都被追加了。代碼如下所示:Python:追加列表中實例的實例屬性

class generation: 
    def __init__ (self, number, container=[]): 
     """This is the class containing lists""" 
     self.n=number 
     self.cont=container 

class hybrid_variant: 
    def __init__ (self, generation): 
     """Instances of this class go into lists in instances of generation""" 
     self.gen=generation 

generation_list=[] 
for x in range(3): 
    hybrid=hybrid_variant(generation= x+1) 
    new_generation=True 
    for elem in generation_list: 
     if elem.n == hybrid.gen: 
      new_generation=False 
    if new_generation==True: 
     generation_list.append(generation(hybrid.gen)) 
    for elem in generation_list: 
     if elem.n == hybrid.gen: 
      elem.cont.append(hybrid) 

在所有世代的每個容器的屬性得到一個元素,而是每一代人都有所有的三個要素。

+0

你的代碼格式被打破;另外,閱讀http://www.python.org/dev/peps/pep-0008/會很好 –

回答

1

this question中所述,可變默認參數按引用存儲,因此如果generation類型的所有實例都將引用同一個列表對象。因此,改變一個會改變它的其他情況。

爲了解決這個問題,就不要使用空列表作爲缺省參數,但構建,而不是方法的空單:

class generation: 
    def __init__ (self, number, container=None): 
     self.n = number 
     self.cont = [] if container is None else container