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

时间:2018-06-21 01:12:44

标签: python-3.x

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

damage = randint(2, 6)
knight = knight - damage

为什么这种情况下的身份相同而第二种情况下的身份不同?

1 个答案:

答案 0 :(得分:0)

因为

  

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

请参见Python Documentation here,也就是说,只要您刚刚启动解释器,就会将-5到256的整数作为前提,并且它们是常量,这意味着它们的id在内存中如果解释器重新启动,将变为ON。

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

因此,在您的情况下,整数将都是相同的值,并且仅当您重新启动/另一个解释器并且float(string等)为动态时,该整数才会是另一个值。 > created表示每次您创建变量或只是一个数字,如下所示:

y=3.1

x=3.1

3.1

解释器将要求 new 内存来回答您的命令,这就是float始终是新值的原因。