Как понять выделение памяти адресом переменной (int)? - PullRequest
0 голосов
/ 12 июля 2019

Я читал о том, как Python управляет переменными. В книге сказано, что целочисленные литералы хранятся в памяти по соседним адресам памяти. Таким образом, если 15 хранится в (x), то 16 хранится в (x + 32). и так далее.

Итак, если мы объявим что-то вроде:

a = 15

Это просто относится к ячейке памяти со значением 15. И если после этого мы объявляем

a = 16

начинает указывать на соседний блок, представляющий 16.

Но тут я понял, что, должно быть, это пустая трата памяти. Из этого я понял, что все адреса памяти заполнены числом от минимального значения int до максимального значения int.

Мне нужно знать, почему Python реализует программу с большим объемом памяти? Или, может быть, я неправильно понимаю? И если я ошибаюсь в понимании этого, как Python дает непрерывные блоки памяти и как он выделяет адрес памяти?

1 Ответ

0 голосов
/ 12 июля 2019

Ваша книга не права.int s не хранятся в смежных адресах памяти, они выделяются объектами, как и все остальное.Маленькие int s могут быть смежными (CPython кэширует небольшие int s навалом, поэтому они, скорее всего, будут смежными), но в лучшем случае это деталь реализации.

CPython small intКэш применяется только к значениям от -5 до 256, поэтому он не тратит много памяти.Все остальные значения int создаются и уничтожаются как обычные объекты по требованию, поэтому:

x = 256
y = x + 1
z = x + 1

назначает совершенно разные ссылки на объекты y и z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...