gotchaMajorpending
Python mutable default arguments -- shared across all calls
Viewed 0 times
mutable defaultdefault argumentshared listNone pattern
python
Error Messages
Problem
Function with default argument def f(items=[]) accumulates items across calls because the default list is shared.
Solution
Never use mutable objects as default arguments. Use None as default and create new object inside the function.
Why
Default argument values are evaluated once when the function is defined, not each time it is called.
Code Snippets
Mutable default argument fix
# WRONG
def add_item(item, items=[]):
items.append(item)
return items
add_item('a') # ['a']
add_item('b') # ['a', 'b'] -- oops!
# RIGHT
def add_item(item, items=None):
if items is None: items = []
items.append(item)
return itemsRevisions (0)
No revisions yet.