为什么同一对象的不同方法具有相同的“ id”?

东:

我以为is运算符检查对象id的相等性。但事实并非如此:

>>> class A(object):
...   def f(): return 1
...   def g(): return 2
...
>>> a = A()
>>> a.f is a.g
False
>>> id(a.f) == id(a.g)
True
安德烈(Andriy Ivaneyko):

Python 将相同的内存位置用于方法a.fa.g,这是“两个具有非重叠生命周期的对象”,因此对这两个对象id返回相同的标识。请参阅下面的详细说明。

is运算符的文档中

运算符是否测试对象标识:并且仅当x和y是同一对象时,x is y才是true。

ID的文档中

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

说明

每当您通过class.name查找方法时instance.name,都会重新创建该方法对象。Python 每次使用描述符协议将函数包装在一个方法对象中。

因此,当您查找id(a.f)或时id(a.g),将创建一个新的方法对象。

  1. 当您搜寻的ID时a.f,会在内存中创建它的副本。该存储位置由返回id
  2. 由于没有对新创建的方法的引用,因此GC回收了该方法(现在可以再次使用内存地址)。
  3. 获得ID的ID后a.g,将在相同的内存地址创建一个副本,您可以id再次使用该地址进行检索
  4. 您有真实 ID的比较。

祝好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

为什么不同的字符串在Python中具有相同的ID?

来自分类Java

Java同步锁键对于同一对象的所有同步方法是否相同?

来自分类Dev

具有相同列表的两个变量具有不同的ID .....为什么?

来自分类Dev

为什么多处理中的新对象具有相同的ID?

来自分类Dev

REST服务和具有不同字段的同一对象的多种表示形式

来自分类Dev

为什么在Python 3.6.x / 2.7.x中,两个具有相同浮点值的不同变量具有相同的id()?

来自分类Dev

使用Dagger注入具有不同接口的同一对象

来自分类Dev

为什么nodejs console.log的同一对象的输出格式不同?

来自分类Dev

为什么同一对象的相同绑定方法的ID相等?

来自分类Dev

id()的含义以及为什么与Process fork不同的对象具有相同的id()值?

来自分类Dev

角@Input,将对象绑定到同一对象但具有不同的属性名称

来自分类Dev

具有相同ID的对象被推入同一数组

来自分类Dev

引用具有不同标签的同一对象

来自分类Dev

为什么GetDC为同一对象返回不同的值?

来自分类Dev

复制具有不同外键ID的相同类的对象

来自分类Dev

为什么static_cast会为同一对象提供不同的内存位置?

来自分类Dev

为什么多个进程在python中具有相同的对象ID

来自分类Dev

为什么复制的对象具有与以前在Python中复制的对象相同的ID?

来自分类Dev

如何对具有不同ID的元素使用相同的JQuery方法?

来自分类Dev

连接具有相同ID的不同数据

来自分类Dev

实体框架以一对一关系添加新记录,而对象具有 ID

来自分类Dev

为什么不同的按钮有相同的 ID?

来自分类Dev

仅在访问同一对象的相同方法时锁定线程

来自分类Dev

当concat 2对象数组列表在android中使用rx时,有什么方法可以删除相同id的对象?

来自分类Dev

如何合并具有相同 id 的对象

来自分类Dev

如何识别数组的某个对象 id 以更改同一对象中元素的状态?

来自分类Dev

为什么 -5 和 256 之外的两个单独创建的不可变对象具有相同的 id?

来自分类Dev

为什么具有不同 id 的 ndarray 对象同时更改?

来自分类Dev

JPA:重用从序列生成的 ID,用于具有复合 PK(ID + VERSION)的同一对象的新版本

Related 相关文章

  1. 1

    为什么不同的字符串在Python中具有相同的ID?

  2. 2

    Java同步锁键对于同一对象的所有同步方法是否相同?

  3. 3

    具有相同列表的两个变量具有不同的ID .....为什么?

  4. 4

    为什么多处理中的新对象具有相同的ID?

  5. 5

    REST服务和具有不同字段的同一对象的多种表示形式

  6. 6

    为什么在Python 3.6.x / 2.7.x中,两个具有相同浮点值的不同变量具有相同的id()?

  7. 7

    使用Dagger注入具有不同接口的同一对象

  8. 8

    为什么nodejs console.log的同一对象的输出格式不同?

  9. 9

    为什么同一对象的相同绑定方法的ID相等?

  10. 10

    id()的含义以及为什么与Process fork不同的对象具有相同的id()值?

  11. 11

    角@Input,将对象绑定到同一对象但具有不同的属性名称

  12. 12

    具有相同ID的对象被推入同一数组

  13. 13

    引用具有不同标签的同一对象

  14. 14

    为什么GetDC为同一对象返回不同的值?

  15. 15

    复制具有不同外键ID的相同类的对象

  16. 16

    为什么static_cast会为同一对象提供不同的内存位置?

  17. 17

    为什么多个进程在python中具有相同的对象ID

  18. 18

    为什么复制的对象具有与以前在Python中复制的对象相同的ID?

  19. 19

    如何对具有不同ID的元素使用相同的JQuery方法?

  20. 20

    连接具有相同ID的不同数据

  21. 21

    实体框架以一对一关系添加新记录,而对象具有 ID

  22. 22

    为什么不同的按钮有相同的 ID?

  23. 23

    仅在访问同一对象的相同方法时锁定线程

  24. 24

    当concat 2对象数组列表在android中使用rx时,有什么方法可以删除相同id的对象?

  25. 25

    如何合并具有相同 id 的对象

  26. 26

    如何识别数组的某个对象 id 以更改同一对象中元素的状态?

  27. 27

    为什么 -5 和 256 之外的两个单独创建的不可变对象具有相同的 id?

  28. 28

    为什么具有不同 id 的 ndarray 对象同时更改?

  29. 29

    JPA:重用从序列生成的 ID,用于具有复合 PK(ID + VERSION)的同一对象的新版本

热门标签

归档