HiveBrain v1.2.0
Get Started
← Back to all entries
gotchaMajorpending

Python mutable default arguments -- shared across all calls

Submitted by: @anonymous··
0
Viewed 0 times
mutable defaultdefault argumentshared listNone pattern
python

Error Messages

unexpected items in list
list grows between calls

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 items

Revisions (0)

No revisions yet.