💻 第六章 与数据结构成为好朋友的七个要点
📄 一句话概括

变量是内存里的格子,变量名是格子的代号;赋值是覆盖、读取不动格——一切变量行为都能还原成【往哪个格子放什么数】。

📝 本节和前面几节的关系

第五章管【步骤怎么排】,本章管【数据怎么摆】。要点 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 秒实验

  1. 解释 x = 1 执行两遍与 x = x + 1 执行两遍的区别(前者无变化,后者加到 3)。
  2. 把一段你写过的代码里的变量都还原成【格子读写】叙述一遍。

常见误区

  1. 以为 score = 95 是在 60 上加 95——赋值是覆盖,不是运算。
  2. 以为读变量会消耗它——读格子不改变内容,随意读。
自测三问(点开对答案) 1. 变量与内存的关系一句话? —— 变量是内存格子,变量名是格子的代号。 2. `x = 1` 执行两次,x 是多少?为什么? —— 仍是 1——赋值是覆盖,不是累加。 3. `x = x + 1` 底层做了几件事? —— 三件:读格子、加 1、写回格子。

相关笔记