创建新的python对象似乎是同一个对象

时间:2011-10-25 09:23:29

标签: 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对象仍然存在,尽管它在私有变量中。

如何更改代码以便创建新对象?

1 个答案:

答案 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)

这可以解决您的问题。