如果你不了解 Python 底层优化的话,那么看到下图的结果可能会感到很疑惑。
原因
在 Python 中,is
关键字用于测试对象的同一性,即检查两个变量是否引用内存中的相同对象。需要注意的是,观察到的行为是特定于 Python 的实现的,并且可能受到不同因素(例如 Python 解释器和优化)的影响。
在 CPython(Python 的参考实现)中,出于性能原因,会对小整数进行缓存。这意味着在一定范围内的整数在内存中是同一个对象,以优化内存使用并提高运算速度。在你的第一个例子中:
a = 256
b = 256
print(a is b) # 输出 True
这是 True,因为由于整数缓存优化,a 和 b 都引用内存中的同一对象。
然而,在第二个例子中:
pythonCopy code
a = 257
b = 257
print(a is b) # 输出 False
这是 False,因为整数 257 没有被缓存,所以它们在内存中是不同的对象。
尽管在某些情况下使用is
比较整数可能有效,但通常建议使用==
运算符进行相等性测试。
==
运算符比较对象的值,这更可靠,是检查两个变量是否具有相同值的标准方法:
pythonCopy code
print(a == b) # 两个例子都成立
因此,总的来说,虽然a is b
可能适用于小整数的缓存情况,但并不能适用所有情况,而且不被认为是相等性测试的良好实践。
比较值时始终推荐使用==
。
往期推荐
【神器推荐】Gofreeproxy 动态代理池小工具
看你是不是清华北大的料子
[实践精品] 新一代内网穿透工具 ligolo-ng
【滴滴道歉】11.27 P0 故障原因公布
如何判断一个孩子有没有数学天赋?
点击上方蓝字关注我们
原文始发于微信公众号(一个不正经的黑客):Python 趣事 is 的叛逆性
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论