绑定到浮点数的名称的标识不同于值的标识



下面是让我感到困惑的代码:

y=3
id(3)  # 1445555280
id(y)  # 1445555280
y=3.1
id(3.1) # 132653722264
id(y)   # 132653720656

为什么案件的身份相等,而第二种情况的身份不相等?

因为

当前的实现为-5到256之间的所有整数保留了一个整数对象数组,当您在该范围内创建int时,您实际上只是返回对现有对象的引用。因此,应该可以更改 1 的值。我怀疑在这种情况下Python的行为是未定义的。:-("。

请参阅此处的 Python 文档,也就是说,任何时候你刚刚启动解释器,从 -5 到 256 的整数被放置作为前提条件,它们是常数,这意味着如果解释器重新启动,它们在内存中的id将发生变化。

浮点数不是纯整数对象,是动态创建的,并且在 GC 没有引用它后将被回收。

因此,在您的情况下,整数将都是相同的值,并且只有当您重新启动/另一个解释器并且 float(字符串等(是动态创建的,这意味着每次您创建一个变量或只是一个数字时,它才会是另一个值,如下所示:

y=3.1

x=3.1

3.1

解释器会要求一个新的存储器来回答你的命令,这就是为什么float总是一个新值。

最新更新