Values & References16 / 18
Up next

Mutable default argument gotcha

# the default [] is built ONCE and reused across calls
def buggy(item, bucket=[]):
    bucket.append(item)
    return bucket


print(buggy(1))
print(buggy(2))
# the fix: sentinel None, then a fresh list each call
def safe(item, bucket=None):
    if bucket is None:
        bucket = []
    bucket.append(item)
    return bucket


print(safe(1))
print(safe(2))
What you're solving

a default list is created once and shared