Chapter 17: Assignment Operators
Part 1: What Are Assignment Operators?
At its core, an assignment operator is used to assign a value to a variable. The most basic one is the humble equals sign =, but the family includes many useful variations that combine assignment with another operation, like addition or multiplication.
The fundamental purpose is to take the value on the right-hand side of the operator and store it in the variable on the left-hand side.
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment"># The most basic assignment</span> my_variable <span class="token operator">=</span> <span class="token number">10</span> <span class="token comment"># The value 10 is now stored in the box named 'my_variable'</span> |
Part 2: The Simple Assignment Operator (=)
This is the foundation. It takes the result of the expression on the right and stores it in the variable on the left.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># Assigning literal values</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span> age <span class="token operator">=</span> <span class="token number">30</span> price <span class="token operator">=</span> <span class="token number">19.99</span> is_valid <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># Assigning the result of an expression</span> x <span class="token operator">=</span> <span class="token number">5</span> <span class="token operator">+</span> <span class="token number">3</span> <span class="token comment"># x gets the value 8</span> y <span class="token operator">=</span> x <span class="token operator">*</span> <span class="token number">2</span> <span class="token comment"># y gets the value 16 (using the current value of x)</span> <span class="token comment"># You can even chain assignments (though style guides often discourage it)</span> a <span class="token operator">=</span> b <span class="token operator">=</span> c <span class="token operator">=</span> <span class="token number">0</span> <span class="token comment"># a, b, and c all get the value 0</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"a: </span><span class="token interpolation"><span class="token punctuation">{</span>a<span class="token punctuation">}</span></span><span class="token string">, b: </span><span class="token interpolation"><span class="token punctuation">{</span>b<span class="token punctuation">}</span></span><span class="token string">, c: </span><span class="token interpolation"><span class="token punctuation">{</span>c<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Important Rule: The left side must be a variable (or a valid “container”). You cannot have a literal or an expression on the left.
|
0 1 2 3 4 5 6 7 |
<span class="token comment"># 5 = x # This is an error! You can't assign a value to the number 5.</span> <span class="token comment"># x + y = 10 # This is also an error! The left side must be a single variable.</span> |
Part 3: The Compound Assignment Operators
This is where assignment gets really powerful and convenient. Often, we want to update a variable based on its current value. For example, adding 5 to a score, or multiplying a price by a discount.
Without compound operators, you’d have to write:
|
0 1 2 3 4 5 6 7 8 9 |
score <span class="token operator">=</span> <span class="token number">10</span> <span class="token comment"># Add 5 to score</span> score <span class="token operator">=</span> score <span class="token operator">+</span> <span class="token number">5</span> <span class="token keyword">print</span><span class="token punctuation">(</span>score<span class="token punctuation">)</span> <span class="token comment"># Output: 15</span> |
This works, but it’s a bit repetitive. Compound assignment operators provide a shorthand. They perform an operation on the variable and then assign the result back to the same variable, all in one step.
The general pattern is: variable operator= expression which is equivalent to variable = variable operator (expression).
Let’s meet the family:
| Operator | Name | Example | Equivalent To |
|---|---|---|---|
+= |
Add and Assign | x += 5 |
x = x + 5 |
-= |
Subtract and Assign | x -= 3 |
x = x - 3 |
*= |
Multiply and Assign | x *= 2 |
x = x * 2 |
/= |
Divide and Assign | x /= 4 |
x = x / 4 |
//= |
Floor Divide and Assign | x //= 3 |
x = x // 3 |
%= |
Modulo and Assign | x %= 3 |
x = x % 3 |
**= |
Exponentiate and Assign | x **= 2 |
x = x ** 2 |
1. Addition Assignment (+=)
This is incredibly common for counters and accumulators.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class="token comment"># Counting things</span> count <span class="token operator">=</span> <span class="token number">0</span> count <span class="token operator">+=</span> <span class="token number">1</span> <span class="token comment"># count = count + 1</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"After first increment: </span><span class="token interpolation"><span class="token punctuation">{</span>count<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 1</span> count <span class="token operator">+=</span> <span class="token number">1</span> <span class="token comment"># count = count + 1</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"After second increment: </span><span class="token interpolation"><span class="token punctuation">{</span>count<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 2</span> <span class="token comment"># Building a sentence</span> message <span class="token operator">=</span> <span class="token string">"Hello"</span> message <span class="token operator">+=</span> <span class="token string">" "</span> <span class="token comment"># Add a space</span> message <span class="token operator">+=</span> <span class="token string">"World!"</span> <span class="token comment"># Add more text</span> <span class="token keyword">print</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> <span class="token comment"># Output: Hello World!</span> <span class="token comment"># Accumulating a sum</span> total <span class="token operator">=</span> <span class="token number">0</span> total <span class="token operator">+=</span> <span class="token number">10</span> <span class="token comment"># total = total + 10</span> total <span class="token operator">+=</span> <span class="token number">25</span> <span class="token comment"># total = total + 25</span> total <span class="token operator">+=</span> <span class="token number">5</span> <span class="token comment"># total = total + 5</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Total sum: </span><span class="token interpolation"><span class="token punctuation">{</span>total<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 40</span> |
2. Subtraction Assignment (-=)
Useful for decrementing counters or reducing values.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
lives <span class="token operator">=</span> <span class="token number">3</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Lives: </span><span class="token interpolation"><span class="token punctuation">{</span>lives<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> lives <span class="token operator">-=</span> <span class="token number">1</span> <span class="token comment"># Player loses a life</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"After losing a life: </span><span class="token interpolation"><span class="token punctuation">{</span>lives<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> lives <span class="token operator">-=</span> <span class="token number">1</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"After losing another: </span><span class="token interpolation"><span class="token punctuation">{</span>lives<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> price <span class="token operator">=</span> <span class="token number">100</span> discount <span class="token operator">=</span> <span class="token number">20</span> price <span class="token operator">-=</span> discount <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Price after $</span><span class="token interpolation"><span class="token punctuation">{</span>discount<span class="token punctuation">}</span></span><span class="token string"> discount: $</span><span class="token interpolation"><span class="token punctuation">{</span>price<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># You can also subtract more than 1</span> countdown <span class="token operator">=</span> <span class="token number">10</span> countdown <span class="token operator">-=</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Countdown: </span><span class="token interpolation"><span class="token punctuation">{</span>countdown<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 8</span> |
3. Multiplication Assignment (*=)
Perfect for applying factors, growth rates, or repeated doubling.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<span class="token comment"># Doubling a number</span> value <span class="token operator">=</span> <span class="token number">2</span> value <span class="token operator">*=</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span> <span class="token comment"># Output: 4</span> value <span class="token operator">*=</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span> <span class="token comment"># Output: 8</span> value <span class="token operator">*=</span> <span class="token number">2</span> <span class="token keyword">print</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span> <span class="token comment"># Output: 16</span> <span class="token comment"># Applying a discount</span> price <span class="token operator">=</span> <span class="token number">50</span> discount_factor <span class="token operator">=</span> <span class="token number">0.8</span> <span class="token comment"># 20% off means paying 80% of the price</span> price <span class="token operator">*=</span> discount_factor <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Sale price: $</span><span class="token interpolation"><span class="token punctuation">{</span>price<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 40.0</span> <span class="token comment"># Compound interest (simplified)</span> investment <span class="token operator">=</span> <span class="token number">1000</span> investment <span class="token operator">*=</span> <span class="token number">1.05</span> <span class="token comment"># Add 5% interest</span> investment <span class="token operator">*=</span> <span class="token number">1.05</span> <span class="token comment"># Another year</span> investment <span class="token operator">*=</span> <span class="token number">1.05</span> <span class="token comment"># Another year</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Investment after 3 years: $</span><span class="token interpolation"><span class="token punctuation">{</span>investment<span class="token punctuation">:</span><span class="token format-spec">.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
4. Division Assignment (/=)
Useful for splitting or averaging.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># Splitting a bill</span> total_bill <span class="token operator">=</span> <span class="token number">120</span> number_of_people <span class="token operator">=</span> <span class="token number">4</span> cost_per_person <span class="token operator">=</span> total_bill cost_per_person <span class="token operator">/=</span> number_of_people <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Each person pays: $</span><span class="token interpolation"><span class="token punctuation">{</span>cost_per_person<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 30.0</span> <span class="token comment"># Calculating average in steps</span> sum_grades <span class="token operator">=</span> <span class="token number">85</span> <span class="token operator">+</span> <span class="token number">92</span> <span class="token operator">+</span> <span class="token number">78</span> number_of_grades <span class="token operator">=</span> <span class="token number">3</span> average <span class="token operator">=</span> sum_grades average <span class="token operator">/=</span> number_of_grades <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Average grade: </span><span class="token interpolation"><span class="token punctuation">{</span>average<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
5. Other Compound Assignments (//=, %=, **=)
These work exactly as you’d expect from their base operators.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<span class="token comment"># Floor Division Assignment (//=)</span> items <span class="token operator">=</span> <span class="token number">10</span> items <span class="token operator">//=</span> <span class="token number">3</span> <span class="token comment"># items = items // 3</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Items after floor division: </span><span class="token interpolation"><span class="token punctuation">{</span>items<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 3</span> <span class="token comment"># Modulo Assignment (%=)</span> remainder <span class="token operator">=</span> <span class="token number">17</span> remainder <span class="token operator">%=</span> <span class="token number">5</span> <span class="token comment"># remainder = remainder % 5</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Remainder after modulo: </span><span class="token interpolation"><span class="token punctuation">{</span>remainder<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 2</span> <span class="token comment"># Exponentiation Assignment (**=)</span> power <span class="token operator">=</span> <span class="token number">2</span> power <span class="token operator">**=</span> <span class="token number">5</span> <span class="token comment"># power = power ** 5</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"2 to the 5th power: </span><span class="token interpolation"><span class="token punctuation">{</span>power<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: 32</span> |
Part 4: Why Use Compound Assignment Operators?
-
Conciseness: They are shorter and often clearer.
total += 10is more direct thantotal = total + 10. -
Performance: In some low-level languages, they can be slightly more efficient because the variable is only evaluated once. In high-level languages like Python, the difference is negligible, but the intent is clearer.
-
Readability: For programmers, seeing
x += 1immediately signals “increment x by 1,” which is a very common and easily understood operation.
Part 5: Common Pitfalls and Important Notes
1. The Left Side Must Be a Variable
You cannot use a compound assignment on the right side of another assignment or on a literal.
|
0 1 2 3 4 5 6 7 |
<span class="token comment"># 5 += 1 # Error!</span> <span class="token comment"># (a + b) += 10 # Error!</span> |
2. Order of Operations
The operation on the right-hand side is performed before the assignment. The expression on the right is fully evaluated using the variable’s current value, and then the result is stored back.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
x <span class="token operator">=</span> <span class="token number">5</span> x <span class="token operator">+=</span> <span class="token number">3</span> <span class="token operator">*</span> <span class="token number">2</span> <span class="token comment"># This is x = x + (3 * 2) = 5 + 6 = 11</span> <span class="token keyword">print</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token comment"># Output: 11</span> y <span class="token operator">=</span> <span class="token number">10</span> y <span class="token operator">*=</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token number">3</span> <span class="token comment"># This is y = y * (2 + 3) = 10 * 5 = 50</span> <span class="token keyword">print</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span> <span class="token comment"># Output: 50</span> |
3. Type Matters
The operation must be valid for the data type of the variable.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
text <span class="token operator">=</span> <span class="token string">"Hello"</span> text <span class="token operator">+=</span> <span class="token string">" World"</span> <span class="token comment"># This works, strings can be concatenated with +=</span> <span class="token keyword">print</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span> <span class="token comment"># But this would fail:</span> <span class="token comment"># number = 5</span> <span class="token comment"># number += "10" # Error! Can't add a string to an integer.</span> |
4. Readability vs. Cleverness
While compound assignments are great, don’t try to get too clever with them in complex expressions. The goal is clear, readable code.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># This is clear</span> total <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">:</span> total <span class="token operator">+=</span> i <span class="token comment"># This is less clear (and would probably be split into multiple lines in real code)</span> <span class="token comment"># x = 5</span> <span class="token comment"># y = (x += 3) * 2 # This doesn't even work in Python!</span> |
Part 6: A Practical, Real-World Example
Let’s build a small program for a simple shopping cart that demonstrates multiple assignment operators in a realistic scenario.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<span class="token comment"># Shopping Cart Example</span> <span class="token comment"># Initialize the cart</span> cart_total <span class="token operator">=</span> <span class="token number">0.0</span> item_count <span class="token operator">=</span> <span class="token number">0</span> cart_items <span class="token operator">=</span> <span class="token string">"Items in your cart: "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Welcome to the store!"</span><span class="token punctuation">)</span> <span class="token comment"># Add first item</span> price1 <span class="token operator">=</span> <span class="token number">25.50</span> cart_total <span class="token operator">+=</span> price1 item_count <span class="token operator">+=</span> <span class="token number">1</span> cart_items <span class="token operator">+=</span> <span class="token string">"Shirt, "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Added Shirt: $</span><span class="token interpolation"><span class="token punctuation">{</span>price1<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Add second item</span> price2 <span class="token operator">=</span> <span class="token number">15.99</span> cart_total <span class="token operator">+=</span> price2 item_count <span class="token operator">+=</span> <span class="token number">1</span> cart_items <span class="token operator">+=</span> <span class="token string">"Hat, "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Added Hat: $</span><span class="token interpolation"><span class="token punctuation">{</span>price2<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Add third item</span> price3 <span class="token operator">=</span> <span class="token number">45.00</span> cart_total <span class="token operator">+=</span> price3 item_count <span class="token operator">+=</span> <span class="token number">1</span> cart_items <span class="token operator">+=</span> <span class="token string">"Jeans, "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Added Jeans: $</span><span class="token interpolation"><span class="token punctuation">{</span>price3<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Apply a 10% discount</span> discount_rate <span class="token operator">=</span> <span class="token number">0.10</span> discount_amount <span class="token operator">=</span> cart_total <span class="token operator">*</span> discount_rate cart_total <span class="token operator">-=</span> discount_amount <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Discount applied: -$</span><span class="token interpolation"><span class="token punctuation">{</span>discount_amount<span class="token punctuation">:</span><span class="token format-spec">.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Calculate average item price (using division assignment)</span> average_price <span class="token operator">=</span> cart_total average_price <span class="token operator">/=</span> item_count <span class="token comment"># Display final cart</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"\n"</span> <span class="token operator">+</span> <span class="token string">"="</span><span class="token operator">*</span><span class="token number">30</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>cart_items<span class="token punctuation">.</span>rstrip<span class="token punctuation">(</span><span class="token string">', '</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Number of items: </span><span class="token interpolation"><span class="token punctuation">{</span>item_count<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Average price per item: $</span><span class="token interpolation"><span class="token punctuation">{</span>average_price<span class="token punctuation">:</span><span class="token format-spec">.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Final total after discount: $</span><span class="token interpolation"><span class="token punctuation">{</span>cart_total<span class="token punctuation">:</span><span class="token format-spec">.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Output:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Welcome to the store! Added Shirt: $25.5 Added Hat: $15.99 Added Jeans: $45.0 Discount applied: -$8.65 ============================== Items in your cart: Shirt, Hat, Jeans Number of items: 3 Average price per item: $25.95 Final total after discount: $77.84 |
This example shows how +=, -=, and /= are used naturally to update the state of our program as it runs.
Summary: The Assignment Operator Philosophy
-
Assignment operators are how we store and update data in variables.
-
The simple assignment operator
=is the foundation. It stores the value on the right into the variable on the left. -
Compound assignment operators (
+=,-=,*=,/=,//=,%=,**=) combine an arithmetic operation with assignment. -
They are a shorthand for
variable = variable operator expression. -
They make code more concise and often more readable for common operations like incrementing a counter (
count += 1). -
Remember that the right-hand expression is fully evaluated using the variable’s current value before the assignment happens.
-
Always prioritize clear, readable code. Compound assignments are tools for clarity, not for writing the most cryptic code possible.
Mastering assignment operators is like learning to use a notebook effectively. You’re not just writing things down; you’re creating a dynamic record that changes and grows as your program runs. This is the essence of state and the foundation of all but the most trivial programs.
