2011-10-25 54 views
3

我有一個對象的問題。創建新的python對象似乎是相同的對象

下面的代碼

class Data: 
    def __init__(self,data=[]): 
     self.data = data 
    def add(self,data): 
     self.data.extend(data) 

class Parent: 
    def testa(self): 
     a = Data() 
     a.add('a') 
     print a.data 
    def testb(self): 
     b = Data() 
     b.add('b') 
     print b.data 

if __name__ == "__main__": 
    p = Parent() 
    p.testa() 
    p.testb() 

生成以下的輸出:

[] 
['a'] 
['a'] 
['a', 'b'] 

爲什麼是不是有新的對象產生的? testb中的第二次看起來舊的Data對象仍然存在,儘管它在一個私有變量中。

如何更改代碼以創建新對象?

+0

不要忘記接受一個適合您的答案,只需點擊綠色的選中標記即可。 –

回答

10

使用[]作爲函數的默認參數將只創建一次列表,並在每次調用時重新使用此列表。有關說明,請參閱http://docs.python.org/tutorial/controlflow.html#default-argument-values。因此,兩個Data對象共享由其成員self.data引用的列表!

你應該修改你的代碼是這樣的:

class Data: 
    def __init__(self, data=None): 
     if data is None: 
      data=[] 
     self.data = data 
    def add(self, data): 
     self.data.extend(data) 

這應該可以解決您的問題。

+0

@BartVanherck,如果這解決了您的問題,您應該將此答案標記爲解決方案。 – danihp