我想知道为什么评价为True
。
x = 1
if x is 1:
print "Does x and 1 point to the same object?"
print "Does this mean python doesn't store redundant values?"
我不希望这种情况发挥作用。
x = range(10)
y = range(10)
if not x is y:
print "I expect this"
我的理解是is
检查两个名字是否指向同一个对象。这是否意味着python有一种避免创建冗余值的机制?
答案 0 :(得分:2)
这是CPython解释器的实现细节,但是具有小值的整数是" interned" - 只要表达式的结果落在某个范围内,就会返回具有相同值的现有int对象。
您可以使用以下代码检查实习范围:
^[^\.]*\.[^\.]*\.[^\.]*$
我的CPython帧间整数介于-5和256之间。
作为一个实现细节,通常不应该依赖这种行为。