I encountered a strange behavior of a function in Python:
def test_path(n, tree=[]):
print (n, id(tree), tree)
tree.append(n)
if n < 3:
test_path(n+1, tree)
Optional argument of recursive function does not re-initialized on subsequent calls:
>>> test_path(0)
(0, 140065391163800, [])
(1, 140065391163800, [0])
(2, 140065391163800, [0, 1])
(3, 140065391163800, [0, 1, 2])
>>> test_path(1)
(1, 140065391163800, [0, 1, 2, 3])
(2, 140065391163800, [0, 1, 2, 3, 1])
(3, 140065391163800, [0, 1, 2, 3, 1, 2])
>>> test_path(1, [])
(1, 140065391262032, [])
(2, 140065391262032, [1])
(3, 140065391262032, [1, 2])
Why three object is the same on all calls when undefined? What am I doing wrong?