Mutable default arguments in Python: why __defaults__ bites
September 2, 2026
Python
Python
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],)
← Python generator frames: Inspecting locals with gi_frame
Claude Code always produces something. That’s the hard part. →