A List Inside A Tuple

Two independent snippets:

# Snippet 1
record = (1, [2, 3])
record[1].append(4)
print(record)
# Snippet 2
record = (1, [2, 3])
record[0] = 99

What happens when each one runs?

A

Snippet 1 prints (1, [2, 3]), unchanged, because indexing a tuple returns a copy of the element rather than a reference to it. Snippet 2 raises TypeError.

B

Snippet 1 prints (1, [2, 3, 4]). Snippet 2 raises TypeError: 'tuple' object does not support item assignment.

C

Snippet 1 raises TypeError, because appending to a value stored inside a tuple counts as mutating the tuple, which is disallowed. Snippet 2 succeeds and rebinds slot 0 to 99.

D

Both snippets raise TypeError, because nothing reachable through a tuple can ever change once the tuple is created.