Think Python for CS114

Chapter 11 Reassignment

As you may have discovered, it is legal to make more than one assignment to the same variable. A new assignment makes an existing variable refer to a new value (and stop referring to the old value).

>>> x = 5
>>> x
5
>>> x = 7
>>> x
7

The first time we display x, its value is 5; the second time, its value is 7.

Figure 11.1 shows what reassignment looks like in a state diagram.

At this point I want to address a common source of confusion. Because Python uses the equal sign (=) for assignment, it is tempting to interpret a statement like a = b as a mathematical proposition of equality; that is, the claim that a and b are equal. But this interpretation is wrong.

First, equality is a symmetric relationship and assignment is not. For example, in mathematics, if a=7 then 7=a. But in Python, the statement a = 7 is legal and 7 = a is not.

Also, in mathematics, a proposition of equality is either true or false for all time. If a=b now, then a will always equal b. In Python, an assignment statement can make two variables equal, but they don’t have to stay that way:

>>> a = 5
>>> b = a    # a and b are now equal
>>> a = 3    # a and b are no longer equal
>>> b
5

The third line changes the value of a but does not change the value of b, so they are no longer equal.

Reassigning variables is often useful, but you should use it with caution. If the values of variables change frequently, it can make the code difficult to read and debug.

State diagram.

Figure 11.1: State diagram.

11.1 Updating variables

A common kind of reassignment is an update, where the new value of the variable depends on the old.

>>> x = x + 1

This means “get the current value of x, add one, and then update x with the new value.”

If you try to update a variable that doesn’t exist, you get an error, because Python evaluates the right side before it assigns a value to x:

>>> x = x + 1
NameError: name 'x' is not defined

Before you can update a variable, you have to initialize it, usually with a simple assignment:

>>> x = 0
>>> x = x + 1

Updating a variable by adding 1 is called an increment; subtracting 1 is called a decrement.

Updating variables using an operator is so common that Python has a shorter way to write it:

x += a     means the same as:     x = x + a
x -= a            . . .           x = x - a
x *= a            . . .           x = x * a
x /= a            . . .           x = x / a
x **= a           . . .           x = x ** a
x //= a           . . .           x = x // a
x %= a            . . .           x = x % a

These are called in-place operators.