两个字符串变量设置为相同的值。 总是返回,但有时返回。s1 == s2
True
s1 is s2
False
如果我打开我的 Python 解释器并做同样的比较,它会成功:is
>>> s1 = 'text'
>>> s2 = 'text'
>>> s1 is s2
True
这是为什么呢?
网友回答:
这里的其他答案是正确的:用于身份比较,而用于平等比较。由于您关心的是相等性(两个字符串应包含相同的字符),因此在这种情况下,运算符是错误的,您应该使用。is
==
is
==
以交互方式工作的原因是(大多数)字符串文本默认被扣留。来自维基百科:is
暂留字符串加快了字符串比较的速度,这有时是严重
依赖具有字符串
键的
哈希表的应用程序
(如编译器和动态
编程语言运行时)的性能瓶颈。
在没有实习的情况下,
检查两个不同的字符串是否相等涉及检查两个字符串
的每个
字符。这很
慢有几个原因:
它在字符串的长度上本质上是
O(n);它通常需要
从多个内存区域读取,这
需要时间;读取填满
处理器缓存,这意味着可用于其他需求的缓存较少
。对于
暂留字符串,在
原始实习生操作之后进行简单的对象
标识测试就足够了;这通常实现为指针
相等测试,
通常只是一个没有内存
引用的单个
机器指令。
因此,当您在程序中有两个字符串文字(字面上键入到程序源代码中的单词,用引号括起来)具有相同的值时,Python 编译器将自动暂留字符串,使它们都存储在相同的内存位置。(请注意,这并不总是发生,并且发生这种情况的规则非常复杂,因此请不要在生产代码中依赖此行为!
由于在交互式会话中,两个字符串实际上都存储在相同的内存位置,因此它们具有相同的标识,因此运算符按预期工作。但是,如果您通过其他方法构造字符串(即使该字符串包含完全相同的字符),则字符串可能相等,但它不是相同的字符串 – 也就是说,它具有不同的标识,因为它存储在内存中的不同位置。is
网友回答:
is
是身份测试,是平等测试。代码中发生的情况将在解释器中模拟,如下所示:==
>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False
所以,难怪它们不一样,对吧?
换句话说:相当于a is b
id(a) == id(b)
网友回答:
关键字是对对象标识的测试,而是值比较。is
==
如果使用 ,则当且仅当对象是同一对象时,结果将为 true。但是,只要对象的值相同,就会为 true。is
==
模板简介:该模板名称为【为什么使用“==”或“is”比较字符串有时会产生不同的结果?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。