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

为什么Python解释器会给不同对象显示相同的内存地址?

原因解释

你观察到的输出差异核心是Python中==和is两个运算符的设计逻辑完全不同:

  • ==是值相等判断运算符:只会对比两个变量指向的对象存储的内容是否一致,只要内容匹配就返回True。你示例中的两个列表存储的元素完全相同,所以x == y输出True。
  • is是身份一致性判断运算符:本质对比的是两个对象在内存中的地址,只有两个变量指向内存里的同一个对象时才会返回True。你这里是两次独立声明列表,Python会分别在内存中创建两个独立的列表实例,地址自然不同,所以x is y输出False。

补充注意点:
部分不可变对象(比如CPython实现中默认缓存的-5~256范围的小整数、满足标识符规则的短字符串)重复声明时,解释器会直接复用缓存的已有对象,此时会出现==和is都返回True的情况,示例如下:

a = 123
b = 123
print(a == b) # 输出True
print(a is b) # 输出True

这个属于特定解释器的优化特性,不是Python通用语法规范,不要在业务代码中依赖该特性做身份判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:03