'is' in Python

  在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”这种不可变的值。由于Python内部操作这些对象的方式,使得对这些对象使用“is”运算符的结果将是不可预测的。

  下面以两个例子加以说明:

复制代码
# DEMO 1:
x = y = [1, 2, 3]
z = [1, 2, 3]

print("'x == y' gets ", x == y)
print("'x == z' gets ", x == z)

print("'x is y' gets ", x is y)
print("'x is z' gets ", x is z)


# DEMO 2:
a = b = 'hello'
c = 'hello'

print("'a == b' gets ", a == b)
print("'a == c' gets ", a == c)

print("'a is b' gets ", a is b)
print("'a is c' gets ", a is c)
复制代码

  DEMO 1的结果没有问题:

'x == y' gets  True
'x == z' gets  True
'x is y' gets  True
'x is z' gets  False

  对于DEMO 2的结果:

'a == b' gets  True
'a == c' gets  True
'a is b' gets  True
'a is c' gets  True

  对于DEMO 2的结果,我们能够理解出现这一结果的原因('hello'是一个字符串常量并且不可改变的,当定义第二个

字符串常量时,由于其与第一个常量值相同,所以 Python不会再次申请一段空间用于存储这一字符串常量--因为这个字符

串常量不会改变,而是直接使用前面已经定义过的字符串常量;因此后来定义的c和先前定义的a,b其实都是同一对象)。

但是,这和我们使用is的本意可能并不一致,所以,在Python中应该避免将“is”运算符用于比较 像“数值”和“字符串”

这种不可变的值。

posted @   XiaoweiLiu  阅读(421)  评论(0编辑  收藏  举报
编辑推荐:
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
阅读排行:
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· 一文搞懂MCP协议与Function Call的区别
· 如何不购买域名在云服务器上搭建HTTPS服务
历史上的今天:
2012-03-12 HDU ACM【1001~1004】
点击右上角即可分享
微信分享提示