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

Python身份运算符与id()函数疑问:为何id(var_1) is id(var_1)返回False?

嘿,这个问题我刚学Python的时候也懵过,咱们一步步把它掰明白~

先搞懂id()函数到底是干啥的

id(obj)函数的核心作用是返回对象在内存中的唯一整数标识——你可以把这个整数当成对象在内存里的“门牌号”,只要这个对象还活着,这个门牌号就不会变。

比如你定义var_1 = 10,var_1指向的是内存中存储整数10的那个对象,id(var_1)就会返回这个对象的门牌号。

为什么print(id(var_1) is id(var_1))会返回False?

这是个很经典的“临时对象回收”+“小整数池”的组合坑,咱们拆解表达式的执行过程:

  1. Python先计算左边的id(var_1):它会拿到var_1指向的10的内存地址(通常是一个很大的整数,比如140703324567616),然后创建一个临时的整数对象来存储这个地址值。
  2. 因为这个地址值远大于Python默认的小整数池范围(通常是-5到256),所以这个临时整数对象用完之后就会被Python的垃圾回收机制销毁。
  3. 接着计算右边的id(var_1):同样拿到同一个地址值,但因为之前的临时对象已经被销毁了,Python会重新创建一个新的整数对象来存储这个值。
  4. 最后用is运算符比较:is的本质是比较两个对象的内存地址,这两个临时整数对象虽然值相同,但内存地址不一样,所以返回False。

你可以试试这个更直观的例子验证:

var_1 = 10
# 先把两次id的结果存下来
id1 = id(var_1)
id2 = id(var_1)
print(id1 == id2)  # 输出True,因为值相同
print(id1 is id2)  # 如果id1是大整数,会输出False,因为是两个不同的对象
身份运算符is的正确打开方式

如果你想判断一个变量是否指向同一个对象,直接比较变量本身就好:

var_1 = 10
print(var_1 is var_1)  # 肯定返回True,因为是同一个对象

再补充个关键知识点:is和==的区别

  • is:检查两个变量是否指向同一个内存对象(门牌号一样)
  • ==:检查两个对象的值是否相等(内容一样)

比如:

a = [1,2,3]
b = [1,2,3]
print(a == b)  # True,值相同
print(a is b)  # False,是两个不同的列表对象,门牌号不一样

内容的提问来源于stack exchange,提问作者NANGA PARBAT SUMARNO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:08:36