Skip to content
Skip to the lesson
← RoadmapDay 2 of 90Foundationsstarts with 5 min · 2h 10m in all

Values, variables, and what a reference really is

By the end of today you can predict whether changing one variable will change another, explain the difference between a name and the value it points at, and say why two lists can look identical yet behave differently.

YesterdayOn Day 1 you learned that values live in memory while a process runs. Today you find out what a variable name actually is.

TomorrowTomorrow you use these values in conditions and loops, where the shape of your logic starts to matter.

01

Why this matters

The single most common beginner bug is expecting a copy and getting a reference. This one idea explains it, and it comes back on Day 5 with collections, on Day 21 with objects, and on Day 44 with database rows.

Variable binding
A name is a label bound to an object, not a container that holds one.
References and aliasing
Two names can point at one object, so mutating through one is visible through the other.
Mutability
Whether an object can change in place, or whether operations produce a new one.
Primitive types
Numbers, strings, booleans and None, and how each behaves under assignment.
02

See it first

5 min

One small thing, worked through here before you go anywhere. Guess the answer before you open it.

A permissions helper. Every new user starts with read access, so the starting list is written down once and handed to each of them.

starting_rights = ["read"]

alice = starting_rights
bob = starting_rights

alice.append("write")

print(bob)

Alice was promoted and given write access. What does printing bob's rights show?

Decide before you open it. Being wrong here is the point.

Show me what happens

["read", "write"]. Bob can write to everything now, and nobody touched bob. There is only one list here. The line alice = starting_rights did not make a copy of anything; it bound a second name to the list that already existed. So did bob. Three names, one list, and append changed that one list. Reading it through any of the three names shows the same thing, because there is nothing else to show. A name in Python is a label pointing at an object. It is not a box holding one. Assignment moves labels around and copies nothing, which is fast and almost always what you want, right up until the moment you assumed otherwise.

Where you meet this at work

This is a real privilege escalation bug and it has shipped in real products. The same shape breaks config that one request edits for everybody, and a default argument that quietly accumulates yesterday's values. When you want a copy you have to ask for one, every single time.

03

Learn it

70 min

Copy this into Claude or ChatGPT. It quizzes you before it explains anything, which is deliberate. The resources under it are how you check what it told you.

Today's Master Prompt

Free · sign in

A prompt written for this day alone: your level, the exact scope, what to leave out, and an instruction to quiz you before it explains anything. Paste it into Claude or ChatGPT and it teaches you today's material.

Sign in to continueNo card, now or later.

Check it against something that is not a model

An assistant can be fluent and wrong, and on a topic you met today you will not catch it. These cover the same ground and were made by people who do this for a living, so they are what you hold the explanation up against. They are other people's work and we only link to them, so judge them for yourself.

3 hand-picked resources

Free · sign in

Videos, official docs and articles covering the same ground, each opened and annotated by hand. They are what you check the assistant against on a day you cannot yet catch it being wrong.

Sign in to continueNo card, now or later.
04

Build it

35 min

Write a script with two variables bound to the same list. Mutate one and print both. Then do the same with two integers and observe the difference. Finally write a function that takes a list, appends to it, and returns nothing, and prove to yourself that the caller's list changed.

05

Recall it

20 min

Answer out loud, reveal, then mark honestly whether you had it. That score is the only thing on this page you do not get to choose.

4 recall questions

Free · sign in

Questions you answer from memory, then grade yourself against the real answer. The score is carried into the mastery rating below it, so an honest miss cannot quietly become a tick.

Sign in to continueNo card, now or later.
06

Rate it

Finishing a day and understanding it are two different things, and this page counts them separately.

Mastery tracking

Free · sign in

Rate yourself against five named criteria per concept. Completion and mastery are tracked separately, and anything you rate shakily comes back automatically on a spaced schedule.

Sign in to continueNo card, now or later.
07

Recap

  • 01A variable is a name bound to an object, not a container holding one
  • 02Two names can point at the same object, so mutation is visible through both
  • 03`is` compares identity, `==` compares value
  • 04Immutable types produce new objects instead of changing in place

Your progress

Free · sign in

Mark days complete, pick up where you left off across devices, and watch completion and mastery diverge. Free, and the account exists only so ninety days of work cannot vanish with a cleared browser.

Sign in to continueNo card, now or later.