python是否为int和许多引用存储了一个值?

时间:2015-06-29 18:14:40

标签: python reference

我想知道为什么评价为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有一种避免创建冗余值的机制?

1 个答案:

答案 0 :(得分:2)

这是CPython解释器的实现细节,但是具有小值的整数是" interned" - 只要表达式的结果落在某个范围内,就会返回具有相同值的现有int对象。

您可以使用以下代码检查实习范围:

^[^\.]*\.[^\.]*\.[^\.]*$

我的CPython帧间整数介于-5和256之间。

作为一个实现细节,通常不应该依赖这种行为。