-5到256范围与
following有关:
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.
为了演示这一点,请注意id(123)如何保持返回相同的值,而id(9999)可以返回不同的值:
In [18]: id(123)
Out[18]: 9421736
In [19]: id(123)
Out[19]: 9421736
In [20]: id(9999)
Out[20]: 9708228
In [21]: id(9999)
Out[21]: 10706060
这当然是当前实施的一个假象.不同的Python实现可能不会这样做,或者可能使用不同的范围.
至于你的最后一个例子:
In [14]: a=[999999, 2, 3]
In [15]: b=a[:]
In [16]: map(id, a)
Out[16]: [10908252, 9421180, 9421168]
In [17]: map(id, b)
Out[17]: [10908252, 9421180, 9421168]
如您所见,[:]只是复制引用.这解释了为什么a [i]对于所有i,b [i]的计算结果为True.