在以下代码中:
magicnumber = 256
for n in range (500):
if n is magicnumber:
print ("the magic number is " , n)
break
else:
print(n)
循环在256处中断,但是如果将magicnumber
设置为257,则不会。为什么?
答案 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