首页 > Python > 为什么使用“==”或“is”比较字符串有时会产生不同的结果?

为什么使用“==”或“is”比较字符串有时会产生不同的结果?

上一篇 下一篇

两个字符串变量设置为相同的值。 总是返回,但有时返回。s1 == s2Trues1 is s2False

如果我打开我的 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 bid(a) == id(b)

分割线

网友回答:

关键字是对对象标识的测试,而是值比较。is==

如果使用 ,则当且仅当对象是同一对象时,结果将为 true。但是,只要对象的值相同,就会为 true。is==

模板简介:该模板名称为【为什么使用“==”或“is”比较字符串有时会产生不同的结果?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 264次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-16
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信模板 自适应 微信图片 响应式 微信素材 企业网站 单页式简历模板 微信文章 微信公众平台 html5
您可能会喜欢的其他模板