首页 > 解决方案 > 绑定到浮点数的名称的标识与值的标识不同

问题描述

下面是让我困惑的代码:

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

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

标签: python-3.x

解决方案


因为

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

请参阅此处的 Python 文档,也就是说,只要您启动解释器,从 -5 到 256 的整数作为先决条件放入,它们是恒定的,这意味着id如果解释器重新启动,它们的内部内存将改变。

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

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

y=3.1

x=3.1

3.1

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


推荐阅读