Почему такое распределение бит в памяти?
Почему такое распределение бит в памяти?
x = 3
y = 7
print(id(3))
print(id(7))
получается
1362879447344
1362879447472
Почему такое распределение как будто оно сразу для 4 5 6 выделило память?
Ответы (2 шт):
Узнать id объекта в памяти:
id('Значение')
Узнать сколько занимает памяти:
import sys
print(sys.getsizeof('Значение'))
Функция id() возвращает уникальный идентификатор для указанного объекта. Все объекты в Python имеют свой уникальный идентификатор. Идентификатор присваивается объекту при его создании. Идентификатор является адресом памяти объекта и будет отличаться при каждом запуске программы.
Более подробно изложено тут https://pythobyte.com/id-function-in-python-62441/
Распределение такое потому что оно действительно выделило память для 4, 5 и 6 заранее.
Питон кеширует маленькие целые числа чтобы в вычислениях они занимали меньше места. Числа в Питоне - объекты, каждая арифметическая операция порождает новый объект. За одним исключением: если число мало, то это будет проверено и вместо создания нового объекта будет взят объект из кеша. Кеш заполняется на старте интерпретатора.
Оба выражения равны десять. У них одинаковые id, так как десятка в кеше:
@>>> id(9 + 1)
140364789449232
@>>> id(11 - 1)
140364789449232
Оба выражения равны тысяче. У них разные id, так как тысячи в кеше нет. Каждая новая вычисленная тысяча - новый объект:
@>>> id(1001 - 1)
140364769497712
@>>> id(999 + 1)
140364769498320
Ещё одна демонстрация:
ids1 = {i: id(i) for i in range(-1000, 1001)}
ids2 = {i: id(i) for i in range(-1000, 1001)}
for n in (-6, -5, 256, 257):
print(n, ids1[n] == ids2[n])
$ python in_cache.py -6 False -5 True 256 True 257 False