Variables are pointers

Copied to clipboard.
Trey Hunner smiling in a t-shirt against a yellow wall
Trey Hunner
1 min. read 2 min. video Python 3.8—3.12

Variables in Python are not buckets that contain things, but pointers: variables point to objects.

Assignments point a variable to an object

Let's say we have a variable x which points to a list of 3 numbers:

>>> x = [1, 2, 3]

If we assign y to x, this does something kind of interesting:

>>> y = x
>>> x == y

The variable x is equal to the variable y at this point, x and y also have the same id, meaning they both point to the same memory location.

>>> id(x)
>>> id(y)

Mutating an object that 2 variables point to

When two variables have the same id, those two variables both point to the same object. So if we mutate the object x points to (by appending to that list) x will now have 4 in it but so will y!

>>> x.append(4)
>>> x
[1, 2, 3, 4]
>>> y
[1, 2, 3, 4]

The reason this happens is all about the line that we wrote above:

>>> y = x

Assignments don't copy anything

Assignment statements never copy anything in Python. Assignments take a variable name and point them to an object.

Variables are not buckets; they're pointers

When I say variables are pointers, I mean they're not buckets that contain things.

When you do an assignment, you're pointing the variable name on the left-hand side of the equals sign (y in this case) to whatever object is referenced on the right-hand side of the equals sign (the list that x already happens to point to in this case).

So variables in Python are pointers, not buckets that contain things.

Series: Assignment and Mutation

Python's variables aren't buckets that contain things; they're pointers that reference objects.

The way Python's variables work can often confuse folks new to Python, both new programmers and folks moving from other languages like C++ or Java.

To track your progress on this Python Morsels topic trail, sign in or sign up.

Concepts Beyond Intro to Python

Intro to Python courses often skip over some fundamental Python concepts.

Sign up below and I'll share ideas new Pythonistas often overlook.