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

Python中‘is’身份运算符的工作原理及变量地址相同疑问解答

Python中is身份运算符的工作原理及小整数缓存解析

一、is运算符的核心作用

is是Python的身份运算符,它的作用是判断两个变量是否指向内存中的同一个对象——换句话说,就是检查两个变量的内存地址(通过id()函数获取)是否完全相同。如果地址相同,返回True;否则返回False。

注意:is和==是完全不同的概念:==仅判断两个对象的值是否相等,而is判断的是对象本身是否为同一个。

二、为什么你的代码中x和y的内存地址相同?

你看到的现象,本质是Python的小整数缓存机制在起作用:
Python为了提升运行效率,会预先缓存-5到256之间的整数对象。当你创建这个范围内的整数变量时,Python不会重新分配内存创建新的对象,而是直接让变量指向缓存中已有的那个整数对象。

你的代码里x=5和y=5,5正好在-5~256的缓存范围内,所以x和y都指向了缓存里同一个5的对象,自然id(x)和id(y)返回的内存地址完全相同,x is y也就返回True。

三、验证缓存范围的示例

如果我们使用超出缓存范围的整数,比如257,在Python交互环境中运行以下代码:

x = 257
y = 257
print(x is y)
print(id(x))
print(id(y))

通常会输出:

False
[不同的内存地址1]
[不同的内存地址2]

这是因为257不在预缓存范围内,Python会为x和y分别创建两个独立的整数对象,所以它们的内存地址不同,is返回False。

(注:在脚本文件中运行时,可能因编译器优化出现不同结果,但交互模式下的表现更能体现缓存机制的本质)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:01:57