Python 趣事 is 的叛逆性

admin 2023年12月2日02:37:26评论7 views字数 761阅读2分32秒阅读模式

如果你不了解 Python 底层优化的话,那么看到下图的结果可能会感到很疑惑。

Python 趣事 is 的叛逆性


原因

在 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可能适用于小整数的缓存情况,但并不能适用所有情况,而且不被认为是相等性测试的良好实践。

比较值时始终推荐使用==

Python 趣事 is 的叛逆性

往期推荐

【神器推荐】Gofreeproxy 动态代理池小工具

看你是不是清华北大的料子

[实践精品] 新一代内网穿透工具 ligolo-ng

【滴滴道歉】11.27 P0 故障原因公布

如何判断一个孩子有没有数学天赋?

【CVE】DoS Vulnerability in JSON-JAVA

Python 趣事 is 的叛逆性

Python 趣事 is 的叛逆性
Python 趣事 is 的叛逆性

点击上方蓝字关注我们

Python 趣事 is 的叛逆性
Python 趣事 is 的叛逆性

原文始发于微信公众号(一个不正经的黑客):Python 趣事 is 的叛逆性

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月2日02:37:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Python 趣事 is 的叛逆性https://cn-sec.com/archives/2261256.html

发表评论

匿名网友 填写信息