¿Por qué los argumentos predeterminados se evalúan en el momento de la definición en Python?

Me fue muy difícil entender la causa raíz de un problema en un algoritmo. Luego, al simplificar las funciones paso a paso, descubrí que la evaluación de los argumentos predeterminados en Python no se comporta como esperaba.

El código es el siguiente:

class Node(object):
    def __init__(self, children = []):
        self.children = children

El problema es que cada instancia de la clase Nodo comparte la mismachildren atributo, si el atributo no se da explícitamente, como por ejemplo:

>>> n0 = Node()
>>> n1 = Node()
>>> id(n1.children)
Out[0]: 25000176
>>> id(n0.children)
Out[0]: 25000176

¿No entiendo la lógica de esta decisión de diseño? ¿Por qué los diseñadores de Python decidieron que los argumentos predeterminados deben evaluarse en el momento de la definición? Esto me parece muy contraintuitivo.

Respuestas a la pregunta(8)

Su respuesta a la pregunta