Возможный дубликат:
"Наименьшее удивление" в Python: аргумент аргумента, разрешаемый аргументом
Я писал код сегодня днем и наткнулся на ошибку в моем коде. Я заметил, что значения по умолчанию для одного из моих вновь созданных объектов переносятся с другого объекта! Например:
class One(object):
def __init__(self, my_list=[]):
self.my_list = my_list
one1 = One()
print(one1.my_list)
[] # empty list, what you'd expect.
one1.my_list.append('hi')
print(one1.my_list)
['hi'] # list with the new value in it, what you'd expect.
one2 = One()
print(one2.my_list)
['hi'] # Hey! It saved the variable from the other One!
Поэтому я знаю, что это можно решить, сделав это:
class One(object):
def __init__(self, my_list=None):
self.my_list = my_list if my_list is not None else []
Что я хотел бы знать... Почему? Почему классы Python структурированы так, что значения по умолчанию сохраняются в экземплярах класса?
Спасибо заранее!