создание новых объектов 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(self):
        b = Data()
        b.add('b')
        print b.data

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

Генерирует следующий вывод:

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

Почему не создан новый объект? Во второй раз в testb кажется, что старый объект данных все еще существует, хотя он был в частной переменной.

Как я могу изменить код, чтобы создать новый объект?

Комментарии:

1. Не забудьте принять ответ, который подходит вам, нажав на зеленую галочку.

Ответ №1:

Использование [] в качестве аргумента функции по умолчанию создаст список только один раз и повторно использует этот список при каждом вызове. См 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)
  

Это должно решить вашу проблему.

Комментарии:

1. @BartVanherck, если это решит вашу проблему, вы должны пометить этот ответ как решение.