前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >[oeasy]python047_变量在内存内的什么位置_物理地址_id_内存地址

[oeasy]python047_变量在内存内的什么位置_物理地址_id_内存地址

原创
作者头像
oeasy
发布2024-12-02 07:47:26
发布2024-12-02 07:47:26
520
举报

变量在内存内的什么位置_物理地址_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
  • [ˌsɪməlˈteɪniəsli]
  • 同时地
  • 同时存在的各个对象
  • 都得确保
  • 有唯一的标识
  • 到底什么是唯一的? 多次引用
  • 存'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 字(可选)

  • 可以
  • 用 变量
  • 给变量 赋值 吗? 🤔
  • 我们下次再说!👋

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档