OA. free
Free
MathWorks Data Structures & Algorithms Data Structures & Algorithms Medium

What is the expected output?

MathWorks technical mcq question, verified with a worked answer. Free to practise - no sign-up.

What is the expected output?

def foo(i, x=[]):
    x.append(x.append(i))
    return x

for i in range(3):
    y = foo(i)
    print(y)

Pick ONE option

Choose one option.
Show answer & explanation
Answer: A. [0, None, 1, None, 2, None]

The mutable default argument x=[] persists across function calls. Each iteration, x.append(i) appends the value and returns None, which is then appended to x. After 3 iterations, the list contains alternating values and None entries: [0, None, 1, None, 2, None]. The list is shared across all calls because default arguments are evaluated once at function definition time.

Step-by-step Derivation:
Trace execution:

Iteration 1 (i=0):

  • x.append(0) executes, appends 0 to x, returns None
  • x.append(None) executes, appends None to x, returns None
  • x = [0, None]

Iteration 2 (i=1):

  • x persists as [0, None] (mutable default argument)
  • x.append(1) executes, appends 1 to x, returns None
  • x.append(None) executes, appends None to x, returns None
  • x = [0, None, 1, None]

Iteration 3 (i=2):

  • x persists as [0, None, 1, None]
  • x.append(2) executes, appends 2 to x, returns None
  • x.append(None) executes, appends None to x, returns None
  • x = [0, None, 1, None, 2, None]

Final output: [0, None, 1, None, 2, None]