Идентичность Python: множественные расстройства личности, требуется сокращение кода [дубликаты]

Возможный дубликат:
Оператор Python «is» ведет себя неожиданно с целыми числами

Я наткнулся на следующеепитон weirdity:

>>> two = 2
>>> ii = 2

>>> id(two) == id(ii)
True
>>> [id(i) for i in [42,42,42,42]]
[10084276, 10084276, 10084276, 10084276]

>>> help(id)
Help on built-in function id in module __builtin__:

id(...)
    id(object) -> integer

    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory address.)
Является ли каждый номер уникальным объектом?Являются ли разные переменные, содержащие одинаковые элементные значения (например, два, ii), одним и тем же объектом?Как идентификатор числа, сгенерированного Python?В приведенном выше примере два и ii указатели на ячейку памяти содержат значение 2? Это было бы очень странно.

Помоги мне распутать этот кризис идентичности.

Еще несколько странностей:

>>> a,b=id(0),id(1)
>>> for i in range(2,1000):
   a,b=b,id(i)
   if abs(a-b) != 12:
    print('%i:%i -> %i' % (i,a,b))

Приведенный выше код проверяет, являются ли идентификаторы последовательных целых чисел также последовательными, и выдает аномалии:

77:10083868 -> 10085840
159:10084868 -> 10086840
241:10085868 -> 10087840
257:10087660 -> 11689620
258:11689620 -> 11689512
259:11689512 -> 11689692
260:11689692 -> 11689548
261:11689548 -> 11689644
262:11689644 -> 11689572
263:11689572 -> 11689536
264:11689536 -> 11689560
265:11689560 -> 11689596
266:11689596 -> 11689656
267:11689656 -> 11689608
268:11689608 -> 11689500
331:11688756 -> 13807288
413:13806316 -> 13814224
495:13813252 -> 13815224
577:13814252 -> 13816224
659:13815252 -> 13817224
741:13816252 -> 13818224
823:13817252 -> 13819224
905:13818252 -> 13820224
987:13819252 -> 13821224

Обратите внимание, что образец появляется с 413 года. Возможно, это связано с тем, что в начале каждой новой страницы памяти ведется учет вуду.

Ответы на вопрос(5)

Ваш ответ на вопрос