鱼C论坛

 找回密码
 立即注册
查看: 3477|回复: 11

[技术交流] python 变量的 id 有时相同有时不相同

[复制链接]
发表于 2020-2-4 17:06:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一个账号 于 2020-3-20 14:30 编辑
  1. >>> x, y = 123, 123
  2. >>> id(x), id(y)
  3. (140716543628768, 140716543628768)
  4. >>> x, y = "小甲鱼", "小甲鱼"
  5. >>> id(x)
  6. 2970394505744
  7. >>> id(y)
  8. 2970394505744
  9. >>> x = "abc"
  10. >>> y = "abc"
  11. >>> id(x)
  12. 2970354036208
  13. >>> id(y)
  14. 2970354036208
  15. >>> x = [1, 2, 3]
  16. >>> y = [1, 2, 3]
  17. >>> id(x), id(y)
  18. (2970392528192, 2970394141056)
  19. >>> x = (1, 2, 3)
  20. >>> y = (1, 2, 3)
  21. >>> id(x)
  22. 2970394367552
  23. >>> id(y)
  24. 2970394369280
  25. >>> x = 99999999999999999999999
  26. >>> y = 99999999999999999999999
  27. >>> id(x)
  28. 2970394102688
  29. >>> id(y)
  30. 2970394099904
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-4 17:21:38 | 显示全部楼层
本帖最后由 一个账号 于 2020-3-16 18:43 编辑


参考这个:https://www.jianshu.com/p/0f6f0db0ce8f
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:26:30 | 显示全部楼层
更复杂的情况
  1. >>> x = '小甲鱼'
  2. >>> y = '小甲鱼'
  3. >>> id(x)
  4. 3096702519120
  5. >>> id(y)
  6. 3096702519024
复制代码
  1. x = '小甲鱼'
  2. y = '小甲鱼'
  3. print(id(x))
  4. print(id(y))
复制代码
  1. ============================= RESTART: D:\py\my1.py ============================
  2. 1496611417808
  3. 1496611417808
复制代码

交互模式地址不同,程序模式地址相同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:36:37 | 显示全部楼层
一个账号 发表于 2020-2-4 17:29
对啊,事情变得越来越复杂了。

忘了在哪本书上看到的,相同值的变量(不包括列表等可变变量)在程序模式都是同一地址的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:43:22 | 显示全部楼层
  1. import time


  2. a = [1, 1]
  3. while True:
  4.     a[0] *= 21
  5.     a[1] *= 21
  6.     print(id(a[0]))
  7.     print(a[0])
  8.     time.sleep(2)
  9.     print(id(a[1]))
  10.     print(a[1])
  11.     time.sleep(2)
复制代码

第一次一样,之后都不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:45:30 | 显示全部楼层
一个账号 发表于 2020-2-4 17:37
那在交互模式为什么不一样?

我的理解,交互模式都是简单的语句,不会太长,所以即使使用不同的地址也占用不了多少内存,仅仅把-5~255等简单的数字使用相同地址。

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:17:29 | 显示全部楼层
  1. >>> a = "。"
  2. >>> b = "。"
  3. >>> id(a), id(b)
  4. (2520972916736, 2520972916656)
  5. >>> a = "......."
  6. >>> b = "......."
  7. >>> id(a), id(b)
  8. (2520972908656, 2520972908464)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 17:18:36 | 显示全部楼层
  1. >>> x = 99999999999999
  2. >>> y = 99999999999999
  3. >>> id(x), id(y)
  4. (64270440, 69024464)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 17:28:43 | 显示全部楼层


蒙了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 17:37:56 | 显示全部楼层
冬雪雪冬 发表于 2020-2-4 17:36
忘了在哪本书上看到的,相同值的变量(不包括列表等可变变量)在程序模式都是同一地址的。

那在交互模式为什么不一样?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 18:27:37 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 13:45:53 | 显示全部楼层
程序模式:静态确定相同变量
交互模式:只能动态访问预先准备的值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-2 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表