python 是否为一个 int 和许多引用存储一个值?
Does python store one value for an int and many references?
我想知道为什么它的计算结果为 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 具有避免创建冗余值的机制?
这是 CPython 解释器的一个实现细节,但是具有小值的整数是 "interned" -- 只要表达式的结果落在某个范围内,就会返回一个现有的具有相同值的 int 对象.
您可以使用以下代码查看被 intern 的范围:
interned_range = [i for i in range(-1000, 1000) if i+0 is i]
print min(interned_range), max(interned_range)
我的 CPython 在 -5 到 256 之间插入整数。
作为实现细节,通常不应依赖此行为。
我想知道为什么它的计算结果为 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 具有避免创建冗余值的机制?
这是 CPython 解释器的一个实现细节,但是具有小值的整数是 "interned" -- 只要表达式的结果落在某个范围内,就会返回一个现有的具有相同值的 int 对象.
您可以使用以下代码查看被 intern 的范围:
interned_range = [i for i in range(-1000, 1000) if i+0 is i]
print min(interned_range), max(interned_range)
我的 CPython 在 -5 到 256 之间插入整数。
作为实现细节,通常不应依赖此行为。