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