Why Python’s Mutable Default Arguments Cause Hidden Bugs (And How to Fix Them)
This article explains why using a mutable object as a Python function's default value leads to unexpected behavior, illustrates the problem with concrete examples, and provides reliable solutions to avoid such subtle bugs.
Understanding Python’s Mutable Default Arguments
Python beginners often encounter confusing bugs caused by using a mutable object as a function’s default value. This article explains why the default value is created only once at function definition, how it leads to unexpected results, and how to avoid the problem.
Consider a function that defines a list parameter with a default empty list and appends a number. When the function is called without providing the argument, the list retains the previously appended value because the same list object is reused each call.
The root cause is that Python evaluates default arguments when the function is defined, storing the object for all subsequent calls. If the default is mutable (e.g., a list), modifications persist across calls, while immutable types such as integers are rebound to new objects.
To prevent this, a common pattern is to use None as the default and create a new list inside the function if needed. This ensures each call works with a fresh object.
Another typical pitfall involves using time.time() as a default argument. Because the default is evaluated once, every call returns the same timestamp—the time when the function was defined—rather than the current time.
The behavior is identical in Python 2.x and 3.x; the only syntactic difference is that print must be called as a function in Python 3.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
MaGe Linux Operations
Founded in 2009, MaGe Education is a top Chinese high‑end IT training brand. Its graduates earn 12K+ RMB salaries, and the school has trained tens of thousands of students. It offers high‑pay courses in Linux cloud operations, Python full‑stack, automation, data analysis, AI, and Go high‑concurrency architecture. Thanks to quality courses and a solid reputation, it has talent partnerships with numerous internet firms.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
