Mutable default arguments in Python: why `__defaults__` bites

Mutable default arguments in Python: why `__defaults__` bites

Because Python functions’ defaults are kept in __defaults__, avoid mutable defaults:

def add1(x=[]):
    x.append(1) # same as: add1.__defaults__[0].append(1) ‼️
    return x
add1() # [1]
add1() # [1, 1]
add1() # [1, 1, 1] 🤯

add1.__defaults__ # ([1, 1, 1],)