Why default argument [] dangerous in Python?
e.g def add_item(item, items=[])
In Python, default arguments are evaluated once at function definition time, not per call.
If the default is a mutable object like a list or dict, it will be shared between function calls, which can cause hidden state and subtle bugs.
The common safe pattern is to use None as the default and create the object inside the function.
def add_item(item, items=[]):
items.append(item)
return items
add_item(1) // returns [1]
add_item(2) // returns [1, 2]
Safe way is:
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
Post #291
232