Variables in Python are not buckets that contain things, but pointers: variables point to objects.
variabledefinition in Python Terminology.
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
True
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)
140043174674888
>>> id(y)
140043174674888
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
Assignment statements never copy anything in Python. Assignments take a variable name and point them to an object.
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.
Intro to Python courses often skip over some fundamental Python concepts.
Sign up below and I'll explain concepts that new Python programmers often overlook.
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.
Intro to Python courses often skip over some fundamental Python concepts.
Sign up below and I'll share ideas new Pythonistas often overlook.