Assignment statements are used to (re)bind names to values and
to modify attributes or items of mutable objects: (See section
5.3 for the syntax definitions for the last three symbols.) An
assignment statement evaluates the expression list (remember
that this can be a single expression or a comma-separated list,
the latter yielding a tuple) and assigns the single resulting
object to each of the target lists, from left to right.
Assignment is defined recursively depending on the form of the
target (list). When a target is part of a mutable object (an
attribute reference, subscription or slicing), the mutable
object must ultimately perform the assignment and decide about
its validity, and may raise an exception if the assignment is
unacceptable. The rules observed by various types and the
exceptions raised are given with the definition of the object
types (see section 3.2). Assignment of an object to a target
list is recursively defined as follows. Assignment of an object
to a single target is recursively defin