📄 一句话概括
变量是内存里的格子,变量名是格子的代号;赋值是覆盖、读取不动格——一切变量行为都能还原成【往哪个格子放什么数】。
📝 本节和前面几节的关系
第五章管【步骤怎么排】,本章管【数据怎么摆】。要点 1 先把最基本的一对关系焊牢:变量与内存。
一、从第三章的老相识说起
第三章讲过:内存是一排带地址的格子,CPU 只跟内存打交道。 现在补上程序员这一侧:变量就是【给某个格子起的代号】——score 这个名字背后,是某个地址上的一个格子。 于是变量的三个动作全说得通:赋值=往格子写入(旧值被覆盖);读取=从格子取值(格子不变);改名=只是代号换了,格子还是那个格子。
二、覆盖,不是累加
最容易踩的坑:score = 60 之后再写 score = 95,格子里是 95——旧值直接被冲掉。
想累加要写成 score = score + 5:先读旧值、加 5、再写回——一读一写,两次访问内存。
第四章追过的执行循环(取指-执行)在这里接上了:每条赋值语句,底层都是【读内存、运算、写内存】的机械三连。
三、为什么这一条是【要点 1】
因为后面所有数据结构(数组、链表、栈、队列、结构体)都是【规划内存格子】的花样。 不先把【变量=格子】焊牢,后面每一种结构都会变成玄学——焊牢了,它们全是显而易见的摆格子方案。
四、动手 Demo:格子视角看赋值
用一个变量的三步一生,演示写入、覆盖、读不改。
# 变量 = 内存格子 + 代号
score = 60
print("赋值后 score =", score)
score = 95
print("覆盖后 score =", score)
total = score + 5
print("total =", total, "(score 仍是", score, ")")
实跑输出:
--------------------------------------------------------------------
变量就是给内存格子起的代号
--------------------------------------------------------------------
要点 1 从一句话开始:**变量是内存里的格子,变量名是格子的代号**。
演示:一个变量从出生到改值,格子里发生了什么——
[第 1 步] score = 60
内存申请一个格子, 贴上代号 score, 放入 60
[第 2 步] score = 95
同一个格子里的旧值 60 被覆盖成 95
[第 3 步] total = score + 5
新格子 total = 100, score 格子不动
代号 格子内容 说明
-------------------------------------------
score 95 被第 2 步覆盖过一次
total 100 由 score 的值算出来
注意两件事:
1. 赋值是【覆盖】, 不是累加——旧值直接被冲掉
2. 读一个格子不会改变它, 写一个格子才会
变量的一切行为,都能还原成【往哪个格子放什么数】——
这就是【了解内存和变量的关系】的全部基础。
好奇的话可以用 id(score) 查 Python 里变量的【身份号】——它就是格子在内存世界的定位思路。 PHP/Python 等语言把格子管得更抽象,但【写覆盖、读不动】这条行为永不改变。
30 秒实验
- 解释
x = 1执行两遍与x = x + 1执行两遍的区别(前者无变化,后者加到 3)。 - 把一段你写过的代码里的变量都还原成【格子读写】叙述一遍。
常见误区
- 以为
score = 95是在 60 上加 95——赋值是覆盖,不是运算。 - 以为读变量会消耗它——读格子不改变内容,随意读。
自测三问(点开对答案)
1. 变量与内存的关系一句话? —— 变量是内存格子,变量名是格子的代号。 2. `x = 1` 执行两次,x 是多少?为什么? —— 仍是 1——赋值是覆盖,不是累加。 3. `x = x + 1` 底层做了几件事? —— 三件:读格子、加 1、写回格子。- ☐ 下一节(6.2 要点2:了解作为数据结构基础的数组)
相关笔记
- Z80 CPU 的寄存器结构 — 内存格子与寄存器,第三章就打过照面
- 🔵 计算机基础 · 索引 — 内存的格子模型在那边更细
- 💻 计算机是怎样跑起来的 · 索引