下面的代码让我感到困惑:
damage = randint(2, 6)
knight = knight - damage
为什么这种情况下的身份相同而第二种情况下的身份不同?
答案 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
始终是新值的原因。