Python id(),带有对象的变量引用

时间:2017-09-07 00:29:45

标签: python

我对python比较陌生,想解决我与某人之间的纠纷。假设您接受了考试或测验,并出现以下问题:

问题32: 在下面的python [IDLE]示例中:

>>> x=52
>>> x 
52
>>> id(x)
505404728

505404728是:

  • a)x
  • 的内容
  • b)x
  • 的ID
  • c)ID为52
  • d)(b)和(c)
  • e)以上都不是

请提供解释。感谢大家!

3 个答案:

答案 0 :(得分:4)

id返回guaranteed to be unique and constant for this object during its lifetime

的整数
>>> x = 52
>>> y = 52
>>> id(x)
12694616
>>> id(y)
12694616

不同的python实现(Cpython,Jython等)以不同的方式实现 - 例如cpython返回对象的内存地址。

更新:实际上,Christian Dean在评论中的答案更准确:答案是呃......' c' ?标签x是否有id,或者它是指向值52的指针吗?

答案 1 :(得分:4)

docs

中有用的摘录摘录
  

当前实现为所有实体保留了一个整数对象数组   当您在该范围内创建-5时,256int之间的整数   实际上只是返回对现有对象的引用。

所以,回顾一下:

In [200]: x = 52

In [201]: id(x)
Out[201]: 4297372320

In [202]: id(52)
Out[202]: 4297372320

x指向5252存储在某处的内存中。 id返回一个“数字”,该数字在其生命周期内保证对于该对象是唯一的。

简而言之,答案是d,因为x52具有相同的引用。您可以argue c,但可能{...}取决于您如何解释问题。

答案 2 :(得分:2)

我说正确的答案是cid(x)返回x引用的对象的ID,52。所以c是正确的。这就是为什么我没有选择其他人的原因:

  • a :选项 a 明显不正确。我们甚至不必寻找明确的答案。我们可以清楚地看到c的值是52,而不是505409528。另外,x没有"持有"任何东西。它是一个引用对象52的标签。
  • b :选项 b 虽然更好,但仍然不正确。其自身的变量x没有ID。它只是一个标签。 52 - 标记或引用的对象 - 确实有ID。
  • d:我没有选择这个,因为我没有选择 b
  • e:该选项也不正确。如上所述,我认为正确的答案是 c

将来,为了能够完全理解和回答您发布的问题,您需要牢固了解Python中的变量。事实资源是Ned Batchelder的一篇题为Facts and myths about Python names and values的文章。