Функция id() в python возвращает только четные числа
Я решал задачку на Codewars про генерацию рандомного bool значения(True или False). У одного из колабораторов было решение:
RandomBool=lambda:id(object())&1==0
Я подумал, что можно убрать сравнение с нулем:
RandomBool = lambda: id(object()) & 1
Но когда тестировал, то что я написал, оказалось, что id() возвращает только четные числа. Я подумал, что это мне так везет, что мне попадаются только четные числа, но зайдя в документацию на digitalOcean, я заметил, что и там в примерах возвращаются четные числа. Было бы хорошо, если бы кто-то умный объяснил, почему так происходит, потому что я думал, эта функция просто возвращает случайное уникальное число.
Ответы (1 шт):
В CPython id — это адрес объекта в памяти, а адреса кратны 8:
Большинство современных компьютеров используют байтовую адресацию, причем каждый адрес идентифицирует один 8-разрядный байт памяти