You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Python代码返回True?打印值不同的原因解析

问题解析

执行代码

rec = {"Name" : "Python", "Age":"20", "Addr" : "NJ", "Country" : "USA"}
id1 = id(rec)
del rec
print(id(id1))
rec = {"Name" : "Python", "Age":"20", "Addr" : "NJ", "Country" : "USA"}
id2 = id(rec)
print(id(id2))
print(id1 == id2)

执行输出

140647920868368
140647920868336
True

疑问

为什么id(id1)与id(id2)的打印值不同,但id1 == id2返回True?


原因分析
  • 先明确id()函数的本质:它返回的是对象在内存中的唯一地址,返回结果是一个整数。
  • id1和id2是两个独立的变量,它们存储的是前后两个字典的内存地址(整数)。这两个变量本身也是Python对象(整数对象),id(id1)取的是id1这个整数对象的内存地址,id(id2)取的是id2这个整数对象的内存地址——这是两个不同的对象,所以它们的内存地址自然不同。
  • 至于id1 == id2返回True:当执行del rec后,第一个字典对象失去了所有引用,被Python垃圾回收机制回收,释放了它占用的内存地址。当你创建内容完全相同的新字典时,Python的内存管理器会复用这块刚释放的内存空间,所以新字典的内存地址和旧字典的地址完全一致,也就是id1和id2存储的整数值相等,因此==比较返回True。

内容的提问来源于stack exchange,提问作者Coder28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:20:18