Я знаю, что это было зарегистрировано где-то в Stack Overflow, но я не могу на всю жизнь найти его... Я буду рад принять любые релевантные ссылки.
У меня есть следующий код:
class A:
def __init__(self, x=[]):
x += [1]
print id(x), x
print "Try with default:"
a = A()
b = A()
c = A()
d = A()
print "Try with custom:"
a = A([1])
b = A([2])
c = A([3])
d = A([4])
Что генерирует следующий вывод:
Try with default:
4342272584 [1]
4342272584 [1, 1]
4342272584 [1, 1, 1]
4342272584 [1, 1, 1, 1]
Try with custom:
4342456688 [1, 1]
4342456688 [2, 1]
4342456688 [3, 1]
4342456688 [4, 1]
Почему при использовании значения конструктора по умолчанию массив растет при каждой последующей конструкции?
@agf придумал ссылку, которая отвечает на вопрос: "Наименьшее удивление" и параметр Mutable Default Argument
Принятый ответ для этой ссылки указывает на следующее полезное объяснение: http://effbot.org/zone/default-values.htm