Функция id() в python возвращает только четные числа

Я решал задачку на Codewars про генерацию рандомного bool значения(True или False). У одного из колабораторов было решение:

RandomBool=lambda:id(object())&1==0

Я подумал, что можно убрать сравнение с нулем:

RandomBool = lambda: id(object()) & 1

Но когда тестировал, то что я написал, оказалось, что id() возвращает только четные числа. Я подумал, что это мне так везет, что мне попадаются только четные числа, но зайдя в документацию на digitalOcean, я заметил, что и там в примерах возвращаются четные числа. Было бы хорошо, если бы кто-то умный объяснил, почему так происходит, потому что я думал, эта функция просто возвращает случайное уникальное число.


Ответы (1 шт):

Автор решения: Vladislav Pavkin

В CPython id — это адрес объекта в памяти, а адреса кратны 8:

Большинство современных компьютеров используют байтовую адресацию, причем каждый адрес идентифицирует один 8-разрядный байт памяти

https://ru.bmstu.wiki/Адресация_памяти

→ Ссылка