python - `is` 对象标识表示比较 : direct object comparison vs. 比较

标签 python python-2.7

所以我得到以下结果:

  1. () is () 返回True(两个对象之间的比较)
  2. id(()) is id(()) 返回 False。 (对象标识的表示之间的比较)

根据python documentation :

The ‘is‘ operator compares the identity of two objects; the id() function returns an integer representing its identity.

给定情况 (1),对象 () 与对象 () 具有相同的标识(内存地址);但在情况(2)中,他们身份的表示并不相同。

这是为什么?

最佳答案

id(..) 函数返回一个整数,可以说代表一个对象的“身份”。虽然如果两个变量 xy 引用同一个对象,x is y 确实成功了,并且 id(x) 的结果等于 id(y),这并不意味着这些整数主题本身是同一个对象

因此你应该使用:

id(()) <b>==</b> id(())
#      ^ == not is

在 Python 中,即使 int 也是对象,虽然通常有一个缓存 使得小整数确实引用同一个对象,但下面的测试通常会失败:

>>> 1234567890 is (1234567891-1)
False
>>> 1234567890 == (1234567891-1)
True

关于python - `is` 对象标识表示比较 : direct object comparison vs. 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43032124/

相关文章:

python - 带有 Pandas 数据点的线图

python - Pandas 聚合——如何保留所有列

python - 梯度下降运行时错误

python - 如何将列添加到多索引数据帧?

python - 在 Python 中使用 OpenCV 从文件中打开视频

python - 用 ctypes 包装 Python 中的 c 函数

Python 图像库无法抓取整个屏幕

python - 尝试,除了 ValueError 替换为 None

python - 扩展 QSpinBox ContextMenu

python - 使用树莓派,Pi相机,Python和Open Cv进行人脸识别