变量名标识符 回忆上次内容
- 上次我们 了解了 id 函数
- id函数 可以得到
- 变量对象 所引用的 唯一内存地址
s1 = "oeasy" A = 10
- 现在都是
- 用 字面量(literal)
- 给变量 赋值
变量赋值 s1 = "oeasy" s2 = s1 print(id(s1)) print(id(s2)) print(id(s1) == id(s2))
- 将s1的值
- 赋给s2
- s2 所指向的 内存地址
- 就是s1 所在的内存地址
图解
- 地址是 同一个
- 两个变量 都指向了 这个 地址
- 完成了 变量的复制
指向
- 可以 将 苹果的价格
- 赋给 香蕉
- 价格就一样了
- 如果 此时
- 对s2 再赋新值 呢?
重新赋值 s1 = "oeasy" s2 = s1 print(id(s1)) print(id(s2)) print(id(s1) == id(s2)) s2 = "o2z" print(id(s1)) print(id(s2)) print(id(s1) == id(s2))
- 将 'o2z' 赋给 s2 后
- s2引用的 内存地址 变了
- s1引用的 没变
再图解
- 用变量 给变量赋值
- 就和 用字面量 给变量赋值一样
- 变量复制 真的很神奇!!!
- 也许 您 问了
- 这 神奇在 哪儿呢?🥸
自我复制
- 从 变量 的 自我复制
- 到 程序 的 自我复制
- 再到 硬件载具 的 自我复制
- 机器 逐渐 具有生命
- 变成 具身智能
- Embodied Artificial Intelligence
速度
- 而且 通过软件
- 完成复制
- 速度 比 生物快太多了
- 很快就会有
- 100个副本
- 可以干活了
声明变量
- 声明 a 是个 变量
- 并赋值为1
- a 是个
- 数字类型 变量
- 引用地址
- 9788960
- 通过 id(a)得到
- 地址里
- 存的值 是1
- 声明 b变量
- 并且把 a所指向变量 的 地址
- 赋给 容器b
- 变量b
- 类型 与a相同
- 引用地址 也与a相同
- a 和 b
- 引用 同一个 地址
- 此地址 存的值 是1
- 如果 把2
- 再赋给a 呢?
重新赋值
- 对a重新赋值后
- a 引用了 新地址 (9788992)
- b 依然引用 老地址
试一试
a = b = 3
连等赋值
- 先算右边的等号
- 再算左边的等号
- a = b
- 将 b 赋给 a
- 两个等号
- 两次 赋值
- 如果 所赋的值 很大 呢?
两个等号
- 这次
- 所赋的值 很大
- 不在 常用地址范围 中
- 属于 边远地址
- 但是
- a和b 所指向的地址
- 仍然 是 同一个地址
同一行 赋不同值
- 在 等号两边 都加上逗号
- 变量名 加上逗号
- 要赋的值 也加上 逗号
- 这种情况 要经过
- unpack
- 解包过程
- 将(4, 5)进行解包
- 解成 4和5
- 分别赋给 a和b
模块类型 import time type(time)
模块地址
- import time之后
- 观察 id(time)
id(time)
- 除了 变量 和 模块
- 函数(function) 有 地址 吗?
函数 地址 id(print) id(ord) id(chr) id(id)
更多 id(range) id(type) id(int) id(str)
class 类型 type(type) type(int) type(str) type(range)
- 回忆一下
- 这个 range怎么
- 输出ASCII码表?
黑暗森林 for num in range(0, 128): if num % 8 == 0: print() print(chr(num), end="\t")
总结
- 这次我们 了解了
- 变量赋值
- 连等赋值
- 解包赋值
- 所有对象
- 变量 variable
- 模块 module
- 函数 function
- 类 class
- 都有 自己所属的 类型
- 也都 在内存中 引用 唯一位置(id)
- 这些数字 组成了 python系统
- 现在 已经声明了 哪些变量 ?🤔
- 可以 查 吗?🤔
- 我们下次再说!👋