PY / LAB 基础实验 03
A SMALL MACHINE FOR BIG IDEAS

元组是一排上了封条的料槽。
能看、能取,但不能改。

选一个预设示例:看拾取滑台按索引读取元组,封条如何拒绝写入,
以及 list() 与 tuple() 怎样在两排料槽之间复制元素。

FIG. 03 / TUPLE SEALERPython 元组封装台
TUPLE·LABPy 3.10.21012345678012345678012012
← → 切换示例 · 空格重播正在校准
高亮 = 正在访问的元素

前排是元组(槽前上一行是正索引,下一行是负索引),压在上面的横杆和挂锁就是“不可变”的封条。后排没有封条,是可修改的列表。滑台上的竖旗落下、封条变亮,表示操作被拒绝。右侧托盘每一行是一个内层元组,各有自己的封条;左侧滑块选行 i,前方滑块选列 j。

当前步骤准备

滑台会按访问顺序逐个移动。

空闲时自动浏览示例
FIELD NOTES

把规则带走

01 / 元组

有序、不可变、靠逗号创建

元组用逗号创建,括号通常只是让它更清楚:t = 3, 1, 4 也是元组。单元素要写 (5,),(5) 只是整数 5;空元组写 ()。

索引、切片、len()、in、count()、index() 都能用;赋值、append、sort 等修改操作都不行。+ 和 * 会生成新元组。

02 / 嵌套元组

不可变的是“装着谁”

n[i][j] 先取内层元组,再取元素。元组不能让某个位置换成别的对象,但如果某个位置放的是列表,这个列表自身的内容仍然可以修改。

只含不可变对象的元组是可哈希的,能作为字典的键、放进集合;含有列表的元组则不可哈希。

03 / 互相转换

转换总是复制出一个新对象

list(t) 得到可修改的新列表,tuple(lst) 得到新的元组,原对象都不变。想“改”元组,就先转列表、改完再转回去。

转换只处理最外层:嵌套结构要逐层转换,比如 [list(p) for p in n]。sorted() 无论输入什么,都返回列表。