The code runs def add(items): items.append(3), then items = [1, 2], then add(items). What is items afterward?
Explanation
The parameter and the caller's name refer to the same list object, so append changes the list visible to the caller. Automatic deep copying would isolate the mutation, but Python calls do not make such copies.