【问题标题】:how to understand id() in python? [duplicate]如何理解python中的id()? [复制]
【发布时间】:2019-03-05 15:55:14
【问题描述】:

关于id()的说明:

关于内置模块中的内置函数 id 的帮助:

id(obj, /) 返回对象的标识。

这保证在同时存在的对象中是唯一的。 (CPython 使用对象的内存地址。)

但我发现了一个奇怪的事情如下:

>>> id([2222]) == id([2222])
True
>>> id([2222]) == id([2223])
True
>>> id([2222]) == id([2224])
True
>>> id([2222]) == id([2225])
True
>>> id((12, 12)) == id((12, 12))
True
>>> id((12, 12)) == id((12, 13))
False
>>> id([12, 12]) == id([12, 13])
True
>>> a = [12, 12]
>>> b = [12, 13]
>>> id(a) == id(b)
False

谁能解释一下?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

当你这样做时

id([2222]) == id([2223])

Python 创建一个新列表,为其提供一个成员 (2222) 并检查其 ID(内存地址)。然后(因为不再使用该列表)它丢弃该列表。现在它在与旧列表相同的内存位置创建另一个新列表,添加 2223 作为其唯一成员。 ID 将相同,因为列表是在相同的内存地址构建的。

这不适用于元组,因为它们是不可变/恒定的,因此有自己的 ID。

【讨论】:

  • 问题中引用的文档甚至暗示了这一点:id 返回的值仅对于“同时存在的对象”是唯一的。问题中创建的列表不会同时存在,因此不能保证它们的 ID 是唯一的。
猜你喜欢
  • 1970-01-01
  • 2020-11-03
  • 2015-06-04
  • 2021-12-19
  • 2023-03-24
  • 2021-10-04
  • 2018-06-20
  • 2020-02-18
  • 2018-10-28
相关资源
最近更新 更多