Why are default arguments evaluated at definition time in Python?
I had a very difficult time with understanding the root cause of a problem in an algorithm. Then, by simplifying the functions step by step I found out that evaluation of default arguments in Python doesn't behave as I expected. The code is as follows: class Node(object): def __init__(self, children = ): self.children = children The problem is that every instance of Node class shares the same `children` attribute, if the attribute is not given explicitly, such as: >>> n0 = Node() >>> n1 = Node() >>> id(n1.children) Out: 25000176 >>> id(n0.children) Out: 25000176 I don't understand the logic of this design decision? Why did Python designers decide that default arguments are to be evaluated at definition time? This seems very counter-intuitive to me.