Chapter 2: Mutability and Object References

# Chapter 2: Mutability and References

print("IMMUTABLE OBJECT EXAMPLE (int):")

a = 5
b = a

print("Before change:")
print("a:", a, "id:", id(a))
print("b:", b, "id:", id(b))

# This creates a NEW integer object
a = a + 1

print("\nAfter change:")
print("a:", a, "id:", id(a))
print("b:", b, "id:", id(b))

# ------------------------------------

print("\nMUTABLE OBJECT EXAMPLE (list):")

list1 = [1, 2, 3]
list2 = list1  # Both reference the same object

print("Before modification:")
print("list1:", list1, "id:", id(list1))
print("list2:", list2, "id:", id(list2))

# This mutates the existing list object
list1.append(4)

print("\nAfter modification:")
print("list1:", list1, "id:", id(list1))
print("list2:", list2, "id:", id(list2))

# ------------------------------------

print("\nMAKING A REAL COPY:")

list3 = list1.copy()  # Creates a new list object

list1.append(5)

print("list1:", list1, "id:", id(list1))
print("list3:", list3, "id:", id(list3))