python - 两个对象的身份比较()
问题描述
文档中的身份比较描述了is
表达式的结果取决于对象身份。
对象身份的运算符
is
和测试:当且仅当和是同一个对象时为真。使用该函数确定对象的身份。产生逆真值。is not
x is y
x
y
id()
x is not y
但是下面的代码显示了不同的结果。
id(object()) == id(object()) # True
object() is object() # False
object() is object()
结果必须True
归因于文档描述。
解决方案
调用object
构造函数(我的意思是object()
),每次都在当前范围内分配并构造一个具有新可用id的新对象实例。
a = object()
b = object()
id(a) == id(b) # False
a is b # False
Python垃圾收集器,一旦对象变得不可用(例如超出范围,解构对象等)就收集对象并释放分配的内存。因此,它们的id将可用于将来构建的下一个对象。
所以在下面的片段中,
object() is object() # False
id(object()) == id(object()) # True
在第一行,同时创建两个对象进行比较,然后由垃圾收集器收集。因此它们有不同的id并且它们是不一样的。
在第 2 行中,创建第一个对象并提取其id进行比较,然后将其解构(导致垃圾收集器收集)。第二个对象使用第一个可用的id,这是刚刚从第一个对象收集的id 。所以他们有相同的id!
推荐阅读
- sql-server - Visual Studio Azure SQL Server:无法建立连接,因为目标机器主动拒绝
- java - 在 Java RX 中可以通过缓冲区和多个值更新观察到吗?
- python - 运行示例 pattern.web.HTTP403Forbidden 时出现模式错误
- gtk - 将 GtkTreeView 样式更改为类似于 Windows
- r - ggplot2:标准错误色带与绘图线不匹配
- javascript - 如何使用 jQuery 切换 div 的背景颜色不透明度?
- java - 带有 MySQL 的 JDBC ResultSet 忽略 ResultSet 类型
- postgresql - 脚本 postgresql 远程 pg_dump 到 localhost
- javascript - React 16 状态测试
- html - 如何使用 mat-icon 创建可收藏的材料链接