// LUA TABLE · MEMORY LAB

堆 · 栈 · 引用
动画实验室

专为初学者做的可交互动画:看懂表放在堆上、赋值是多一把钥匙、拷贝才换地址。点按钮逐步演,比干读文字直观十倍。

← 回文章课
01 抽屉收纳盒
02 表住堆上
03 赋值=多钥匙
04 拷贝 vs 引用
05 # 号断档

抽屉收纳盒:t[1] 到 t[5]

表就是收纳盒。点击「放进抽屉 / 取出」,观察顺序下标从 1 开始。

代码对应

local t = {1,2,3,4,5}

隐式主键 1..5,Lua 帮你写好,界面里用抽屉编号表示。

运行日志

点击按钮开始…

表住堆上:变量只是门牌号

左边是栈上的变量名,右边是堆里的数据块。创建表时,堆上圈地,变量存地址。

关键动作

「创建表」把 1,2,3,4 放进堆;「打印地址」看变量指向哪一块。

为什么 {} == {} 是 false

内容再像,两块堆地址不同。比的是「是不是同一只表」,不是长得像不像。

等待操作…
栈 · 变量名 堆 · 表数据 地址箭头

b = a:不是复印,是多一把钥匙

执行 local b = a 后两个变量指向同一堆地址。改 b 就是改 a。

三步演完

① 创建 a ② b = a ③ b[3] = 100,看 a[3] 是否跟着变。

打印结果

按顺序点 ①②③…

拷贝 vs 引用

数字赋值是值拷贝;表赋值是共享地址;浅拷贝只复制第一层。

对比实验

结论卡

值类型比内容,表比地址。函数收表参数时,改的就是调用方那只表。

选一个实验…

# 号只信连续数组

主键连续时 #t 准;断档或字典表时 # 号不可靠。

试一试

#t 输出

观察 #t 与实际元素数是否一致…