'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”运算符用于比较 像“数值”和“字符串”
这种不可变的值。
· 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】