Python - Names & Binding

Overview

Estimated time: 30–40 minutes

Understand how names refer to objects, the difference between identity and equality, and why mutability matters for program behavior.

Learning Objectives

  • Explain names vs objects; identity (is) vs equality (==).
  • Recognize mutable vs immutable types and side effects.
  • Avoid common mutability pitfalls in lists and dicts.

Prerequisites

Identity vs Equality

a = [1, 2]
b = [1, 2]
print(a == b)  # equality: True
print(a is b)  # identity: usually False

c = a
print(c is a)  # True (same object)

Expected Output:

True
False
True

Mutability

nums = [1, 2, 3]
nums.append(4)     # mutates list
print(nums)

x = 10
x += 1             # creates a new int object (ints are immutable)
print(x)

Expected Output:

[1, 2, 3, 4]
11

Common Pitfalls

  • Using a mutable default argument in a function. Prefer None + initialize inside.
  • Aliasing: two variables referencing the same list; modifying one affects the other.

Checks for Understanding

  1. What operator checks identity? What about equality?
  2. Which of these are immutable: list, tuple, str, dict?
Show answers
  1. is checks identity; == checks equality.
  2. tuple and str are immutable; list and dict are mutable.

Exercises

  1. Write a function that appends to a list argument; observe aliasing if two names refer to the same list.
  2. Demonstrate the mutable default pitfall and fix it by using None.