Инициализация класса Python и поведение модели памяти

1

Я знаю, что это было зарегистрировано где-то в 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]

Почему при использовании значения конструктора по умолчанию массив растет при каждой последующей конструкции?

Теги:

1 ответ

0
Лучший ответ

@agf придумал ссылку, которая отвечает на вопрос: "Наименьшее удивление" и параметр Mutable Default Argument

Принятый ответ для этой ссылки указывает на следующее полезное объяснение: http://effbot.org/zone/default-values.htm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню