Почему переменная экземпляра ведет себя как переменная класса в Python? [Дубликат]

Возможный дубликат: «

Наименее удивление » в Python: изменяемый аргумент по умолчанию

У меня есть следующий код:

class Node(object):
    def __init__(self, value = 0, children = {}):
        self.val = value
        self.children = children

    def setChildValue(self, index, childValue):
        self.children[index] = Node(childValue)

n = Node()
n.setChildValue(0,10)
print n.children
n2 = Node()
print n2.children

И это печатает:

{0: }
{0: }

Итак, мой вопрос: почему дети определены в n2? Children - переменная экземпляра, и все же это 'действует как переменная класса.

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос