变量在内存内的什么位置_物理地址_id_内存地址_物理地址 回忆上次内容
- 声明、赋值之前
- 不能使用变量
- 声明、赋值了之后
- 才能使用变量
添加图片注释,不超过 140 字(可选)
- 顺序 必须 清清楚楚
- 那 声明的 这俩变量
- 具体存在哪儿呢?
问问ai
添加图片注释,不超过 140 字(可选)
- 收获 新函数 id id
添加图片注释,不超过 140 字(可选)
- id 就是
- identity
- 唯一的身份标识号
- 身份证号
添加图片注释,不超过 140 字(可选)
- id函数怎么用呢? id q #退出 pdb环境
- 从pdb退回到vim
- 进入游乐场
s1 = "oeasy" id(s1)
- 结果
- s1的id是一长串数字
- 数值 和 截图不一样 很正常
- 只要是 一串数字 就对了
添加图片注释,不超过 140 字(可选)
- 这串数字 什么含义? 问问ai
添加图片注释,不超过 140 字(可选)
- 这串数字 是
- 内存地址的 整数值
- 什么是内存? 内存
- 内存
- 随机存储器
- Random Access Memory
- RAM
添加图片注释,不超过 140 字(可选)
- py程序 运行在 内存中
- 其中变量 也存储在 内存中
- 每次运行的状态不同
- 分配的位置也不同
添加图片注释,不超过 140 字(可选)
- 内存里面有很多字节
- 就像 楼房里面的小房间
内存地址
- 变量就存储在小房间中
- 内存地址 就是 小房间的门牌号码
添加图片注释,不超过 140 字(可选)
- 回游乐场 去问问 python本人
- id函数 是什么意思?
唯一标识 help(id)
- id返回 的是
- 对象 的 唯一标记
- the identity of an object
添加图片注释,不超过 140 字(可选)
- 对于
- 不断变化 的 对象
- 每个 对象 都有
- 唯一标记
- idnetity
- 两个变量
- id会相同吗?
测试
- 退回游乐场 s1 = "oeasy" s2 = "o2z" print(id(s1)) print(id(s2))
- 两个变量s1、s2
- 确实id不同
添加图片注释,不超过 140 字(可选)
- 如果 两个变量s1、s2
- 存的都是 "oeasy" 呢?
相同对象 s1 = "oeasy" s2 = "oeasy" print(id(s1)) print(id(s2)) print(id(s1) == id(s2) )
- 结果
添加图片注释,不超过 140 字(可选)
- s1、s2
- 存的内容相同
- 都是 "oeasy"
- id 居然 也相同 ?!!!
- id 不是 变量唯一身份证 吗?
- 两个 不同的变量 id相同
- 怎么理解?
再查询手册
- 对象的id
- 唯一标识地址
- 确实 是要确保 唯一
- unique
添加图片注释,不超过 140 字(可选)
- simultaneously
- [sml'tenisli]
- 同时地
- 同时存在的各个对象
- 都得确保
- 有唯一的标识
- 到底什么是唯一的? 多次引用
- 存'oeasy' 的
- 这块内存地址
- 是唯一的
- 这块地址
- 被 两个变量 所引用
- s1
- s2
- 两个变量都引用 这个房间号
添加图片注释,不超过 140 字(可选)
- 但是 如果
- 又 给s1 再赋个新值
- 那么 s1
- 会 引用 新的地址 吗? 实践 s1 = "oeasy" s2 = "oeasy" print(id(s1)) print(id(s2)) print(id(s1) == id(s2) ) s2 = "o2z" print(id(s1)) print(id(s2)) print(id(s1) == id(s2) )
- s2 最初 引用的是
- 存"oeasy"的地址
添加图片注释,不超过 140 字(可选)
新id
- 现在 s2 要存"o2z"
- 得换 新地址
添加图片注释,不超过 140 字(可选)
- 如果s1所存储的字符串
- 也变了呢?
也变了 s1 = "oeasy" s2 = "oeasy" print(id(s1)) print(id(s2)) print(id(s1) == id(s2) ) s1 = "ooo" s2 = "o2z" print(id(s1)) print(id(s2)) print(id(s1) == id(s2) )
添加图片注释,不超过 140 字(可选)
- 原来存"oeasy" 那片地址
- 怎么办呢?
自动垃圾回收
- 系统 发现
- 这块 存着 "oeasy"字符串 的地址、
- 没有对象 再引用
- 就垃圾回收了
添加图片注释,不超过 140 字(可选)
- 其他语言
- 一般还需要 手动垃圾回收
- python 直接就给 自动回收了
总结
- 这次我们 了解了 id 函数
- id函数 可以得到
- 变量对象 所引用的 唯一内存地址
s1 = "oeasy" A = 10
- 现在都是
- 用 字面量(literal)
- 给变量 赋值
添加图片注释,不超过 140 字(可选)
- 可以
- 用 变量
- 给变量 赋值 吗?
- 我们下次再说!
- 蓝桥->https://www.lanqiao.cn/courses/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython