What is the output of the following Python program demonstrating mutable default arguments?
Assesses fundamental understanding of Python conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
### The Code Snippet:
def foo(x=[]):
x.append(1)
return x
print(foo())
print(foo())
### Output:
[1]
[1, 1]
### Technical Explanation:
In Python, default argument expressions are evaluated once at function definition time, not each time the function is called.
Because Python lists are mutable objects, the default parameter x references a single list stored in the function's __defaults__ attribute. Subsequent invocations that omit argument x continue modifying this same in-memory list object.
### The Idiomatic Production Fix:
Always use None as the default argument sentinel value:
def foo(x=None):
if x is None:
x = []
x.append(1)
return x
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.