Python中的幻数

时间:2018-10-13 15:19:43

标签: python

在以下代码中:

magicnumber = 256
for n in range (500):
    if n is magicnumber:
        print ("the magic number is " , n)
        break
    else:
        print(n)

循环在256处中断,但是如果将magicnumber设置为257,则不会。为什么?

1 个答案:

答案 0 :(得分:5)

因为您要用identity检查is(而不是用equality检查==)。

作为实现细节,Python为所有整数保留一个整数对象数组 在-5到256之间,当您在该范围内创建int时,实际上 返回对现有对象的引用。

因此大于256的整数仍将是equal,而不是identical(除非它们引用相同的对象,否则可以将其与id()进行比较)。

来源:https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong