Прочтите эту ловушку об изменяемых аргументах функции по умолчанию:
http://www.ferg.org/projects/python_gotchas.html
Короче говоря, когда вы определяете
def __init__(self,a=[])
Список, на который ссылается self.a по умолчанию, определяется только один раз, во время определения, а не во время выполнения. Поэтому каждый раз, когда вы звоните o.a.append
или o1.a.append
, вы изменяете один и тот же список.
Типичный способ исправить это - сказать:
class A(object):
def __init__(self, a=None):
self.a = [] if a is None else a
Перемещая self.a=[]
в тело функции __init__
, новый пустой список создается во время выполнения (каждый раз, когда вызывается __init__
), а не во время определения.