“is”运算符未按预期工作

2023-11-29

看看这段代码:

import re

ti = "abcd"
tq = "abcdef"
check_abcd = re.compile('^abcd')
print id(check_abcd.search(ti))
print id(check_abcd.search(tq))
print check_abcd.search(ti)
print check_abcd.search(tq)
if check_abcd.search(ti) is check_abcd.search(tq):
    print "Matching"
else:
    print "not matching"

Output:

41696976
41696976
<_sre.SRE_Match object at 0x00000000027C3ED0>
<_sre.SRE_Match object at 0x00000000027C3ED0>
not matching

的定义is:

`is` is identity testing, == is equality testing. 
 is will return True if two variables point to the same object

1)现在为什么是is不回来True当 id 和对象引用相同时。

2)When is被替换为==它仍在返回false.这是使用比较对象时的预期行为==.


您从未分配返回值,因此在打印后id()返回值的值check_abcd.search()调用、Pythondiscards返回值对象,因为没有任何东西再引用它。 CPython 对象的生命周期直接由对其引用的数量控制;一旦引用计数降至 0,该对象就会从内存中删除。

废弃的内存位置可以重新使用,因此您会希望看到相同的值出现在id()来电。请参阅id()文档:

返回对象的“身份”。这是一个整数(或长整数),保证该对象在其生命周期内是唯一且恒定的。具有不重叠生命周期的两个对象可能具有相同的生命周期id() value.

在你的代码中,你实际上没有任何地方one对象,您有两个生命周期不重叠的独立对象。

如果您想确保指定返回值id()值不被重用:

>>> import re
>>> ti = "abcd"
>>> tq = "abcdef"
>>> check_abcd = re.compile('^abcd')
>>> ti_search = check_abcd.search(ti)
>>> tq_search = check_abcd.search(tq)
>>> id(ti_search), id(tq_search)
(4378421952, 4378422056)
>>> ti_search, tq_search
(<_sre.SRE_Match object at 0x104f96ac0>, <_sre.SRE_Match object at 0x104f96b28>)
>>> ti_search is tq_search
False

通过分配返回值check_abcd.search()(正则表达式MatchObjects) 创建了一个额外的引用,Python 无法重用该内存位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“is”运算符未按预期工作 的相关文章

随机推荐

  • grails 模板 - 脚手架控制器

    我是 grails 的新手 我现在正在研究我的脚手架模板 特别是我的控制器 每次生成它时我都想要一个定制的控制器 所以我使用了 安装模板 我总是在控制器上创建一个命令对象 是否可以将域类中的字段包含到生成的控制器中的命令对象中 我知道我必须
  • Java - 如何从哈希图中找到最接近特定数字的值?

    嗨 我有一个HashMap
  • Javascript:使用 setTimeout 重试的函数

    我有一个函数downloadItem由于网络原因可能会失败 我希望能够在实际拒绝该项目之前重试几次 重试需要超时 因为如果出现网络问题 则立即重试是没有意义的 这是我到目前为止所拥有的 function downloadItemWithRe
  • 这段 javascript 行中的冒号 (:) 是什么意思?

    下面第3 6行中的 是什么意思 function displayError error var errorTypes 0 Unknown error 1 Permission denied 2 Position is not availab
  • 使用 Asynctask 在列表视图中显示数据

    我成功在列表视图中显示了来自 Web 服务 JSON 的数据 但我想添加 Asyntask 我可以在我的代码中放置代码 Asyntask 的位置 这是我的代码 用于在列表视图中显示数据 public class Jadwal remix e
  • JQuery 数据表中的 TableTools 导出不起作用

    我已经为此苦苦挣扎了两天 我已经在数据表论坛上发帖了 但没有得到回复 所以我希望这里的社区能够提供帮助 我在这里阅读过有关此问题的类似帖子 但正如许多帖子所建议的那样 我已经使用了 sSwf 的正确路径 出现导出按钮并加载所有资源 但是 单
  • UITableViewCell 无法用一根手指点击来点击,但可以用两根手指点击

    我创建了一个表视图 并且 tableViewCell 无法用一根手指单击 但是当我尝试用两根手指单击 tableViewCell 时 会发生单击事件 我不知道为什么会出现这种情况 我在 tableView 中创建了一个自定义单元格 Invi
  • 将公式转换为 CNF

    有没有办法使用 z3 将公式转换为 CNF 使用 Tseitsin 式编码 我正在寻找类似的东西simplify命令 但保证返回的公式为 CNF 您可以使用apply命令来执行此操作 我们可以为该命令提供任意战术 策略 有关 Z3 4 0
  • Crystal Reports 打印纵向而不是横向

    我在 SAP Crystal Reports 14 1 4 1327 中创建了一个非常简单的测试报告 rpt 文件 我在页面设置中将页面方向设置为横向 如果我从 Crystal Reports Designer 打印文档 它将以横向方式正确
  • 如何在Form1、WinForms C#中使用Form2的变量?

    我在 Visual Studio 2013 中有一个解决方案 其中包含两个表单 我想要当在 Form2 中按下按钮时 变量flag fb已更新 我在 Form1 中使用它的值 有什么办法可以做到这一点吗 谢谢 方法一 使用参数化构造函数在表
  • Android:PatternSyntaxException:语法错误 U_ILLEGAL_ARGUMENT_ERROR

    我在用着json io将一些 JSON 数据转换为 Java 对象 DataTransferContainer dataTransferContainer DataTransferContainer JsonReader jsonToJav
  • 使用 gnuplot 绘制两个相邻的“带框”图

    我试图将两个数据系列绘制在一张图中 作为 gnuplot 中的方框 该脚本目前如下所示 set terminal postscript eps enhanced color set title Distribution of the ext
  • C++:调用派生类的虚函数

    假设我有一个带有虚函数的类和一个以不同方式实现该虚函数的派生类 假设我还有一个用于存储派生类的基类向量 如果事先不知道派生类是什么 我将如何在向量中执行派生类的虚函数 说明问题的最少代码 include
  • 如何在任意 Java 应用程序中启用抗锯齿功能?

    尽管 Swing 能够提供抗锯齿字体 但许多 Java 应用程序默认情况下并不使用抗锯齿字体 如何强制任意 Java 应用程序使用 AA 字体 适用于我正在运行的应用程序和我正在开发的应用程序 如果您有权访问源代码 则可以在 main 方法
  • 创建色轮的功能[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 这是我多次伪解决但从未完全找到解决方案的问题 问题是想出一种方法来生成N颜色 尽可能区分N是一个参数 我对此的第一个想法是 如何在空间中生成 N 个向量 使彼此之间的距离最大化
  • 单元格悬停时的工具提示图像,Google 电子表格

    我目前正在制作一个必须包含大量图像引用的 Google 电子表格 我想要实现的是 当您将鼠标悬停在单元格上时 会出现图像 如工具提示 I found 这个小部件在 Google Developers 上 但是当我将代码添加到电子表格时什么也
  • IE9 下的 FakeSmile

    我正在尝试在 IE9 中伪造 SMIL 支持假笑 我动态创建 SVG 元素 添加带有 animate 元素的 rect 元素并调用 beginElement IE9 给我一个错误 对象不支持属性或方法 beginElement 静态 SVG
  • 在数据库中存储标签的最有效方法是什么?

    我正在我的网站上实现一个类似于 stackoverflow 使用的标签系统 我的问题是 存储标签以便搜索和过滤标签的最有效方法是什么 我的想法是这样的 Table Items Columns Item ID Title Content Ta
  • 无法在运行时修改mapred.job.name。它不在允许在运行时修改的参数列表中

    我正在尝试在气流中运行一些蜂巢作业 我建立了custome jdbc 连接 您可以在图中看到 我可以通过 Airflow Web ui 查询 Hive 表 数据分析 gt 即席查询 我还想运行一些来自互联网的示例 dag 文件 File N
  • “is”运算符未按预期工作

    看看这段代码 import re ti abcd tq abcdef check abcd re compile abcd print id check abcd search ti print id check abcd search t