9.13. List arguments¶
When you pass a list to a function, the function gets a reference to the
list. If the function modifies a list parameter, the caller sees the
change. For example,
delete_head removes the first element from a
list and is used like this:
t and the variable
aliases for the same object.
It is important to distinguish between operations that modify lists and
operations that create new lists. For example, the
method modifies a list, but the
+ operator creates a new
This difference is important when you write functions that are supposed to modify lists. For example, this function does not delete the head of a list:
def bad_delete_head(t): t = t[1:] # WRONG!
The slice operator creates a new list and the assignment makes
t refer to it, but none of that has any effect on the list
that was passed as an argument.
An alternative is to write a function that creates and returns a new
list. For example,
tail returns all but the first element
of a list and leaves the original list unmodified. Here’s how it is used: