Я положу код первого:Неожиданное поведение при использовании словаря в классе
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Item(object):
... def __init__(self, name, value={}):
... self.name = name
... self.value = value
... def __str__(self):
... return self.name + " - " + str(self.value)
... def addValues(self, value):
... for key,price in value.iteritems():
... self.value[key] = price
...
>>>
>>> item1 = Item('car')
>>> print item1
car - {}
>>> item2 = Item('truck')
>>> print item2
truck - {}
>>> item1.addValues({'blue':6000})
>>> print item1
car - {'blue': 6000}
>>> print item2
truck - {'blue': 6000}
>>>
Я создал два экземпляра класса Item, ITEM1 и item2. Затем я изменил значение атрибута словаря на item item1 с помощью метода addValues. Проблема заключается в том, что добавление словарного атрибута item1 также добавляет то же значение в item2. Может ли кто-нибудь объяснить, что здесь происходит? Как изменилось значение item1 на значение item2? Я что-то забыл?
Это происходит из-за использования '{}' (изменяемый словарь) как аргумент по умолчанию. На этом должно быть много дубликатов. – kennytm
Возможный дубликат [«Наименьшее удивление» в Python: разрешимый аргумент по умолчанию] (http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) –
установить значение по умолчанию на «Нет» и обрабатывать его. –