【问题标题】:Does repeated identical assignment going to lead to the same id() value?重复相同的分配是否会导致相同的 id() 值?
【发布时间】:2012-05-25 06:29:07
【问题描述】:

这个问题的动机是 this question 我都误读了 提供了一个拙劣的答案(我删除了它)

我重新阅读了http://docs.python.org/library/functions.html#id,并在 Python 中尝试过:

>>> a = 3
>>> id(a)
5392456

>>> a = 3
>>> id(a)
5392456

重复了几次......

事实上,这些数字(即内存中对象的地址)是 同样是依赖于实现,保证,是 正确的?他们可能不一样,对吧?我的理解是每次我这样做 这个简单的分配,我正在创建一个新对象并将其绑定到一个变量 标识符,所以我不能假设它们会放在同一个地方 在内存中。

这种理解正确吗?如果有,有什么例外吗?

【问题讨论】:

  • 实现是免费的,从不实习任何东西。
  • @interjay 好的,所以您确认我对此的理解是正确的,对吧?并且不能保证我的示例给出相同的内存值这一事实。
  • 是的,你不应该指望它是一样的。 id 有用的情况非常少见。
  • 不知道为什么我在发布后的一个多月内得到了反对票......我认为问题很清楚,我也做了一些自己的步法......去想。

标签: python object variable-assignment


【解决方案1】:

您可以做出这样的假设,但是对于像 int 这样的不可变类型,而不是创建一个新对象,您的变量可能只是引用该不可变对象(如果它已经存在)。当您进行分配时,您正在创建对对象的引用。该对象可能已经存在或可能已创建。

【讨论】:

  • 所以我永远不能假设价值是一样的,对吧? (这至少是我想用我的问题确认的)
  • 如果你给变量a赋值3,这个变量引用了一个值为3的int对象。你可以拥有多个具有相同值但不同对象id的对象.您关心的是,当您使用变量 a 时,您的值为 3,因此 python VM 处理对象的方式取决于实现,您应该永远指望它们相同.
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 2021-11-23
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2020-05-05
  • 1970-01-01
相关资源
最近更新 更多