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

创建新的python对象似乎是同一个对象,python,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(sel

我对物体有问题

下面的代码

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
对象共享其
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)

这将解决您的问题。

@BartVanherck,如果这解决了您的问题,您应该将此答案标记为解决方案。不要忘记通过单击绿色复选标记来接受适合您的答案。