Python: очистка переменных из памяти - PullRequest
0 голосов
/ 16 июня 2020

Ниже приведен код Python, демонстрирующий, как неизменяемые типы, такие как целые числа, хранятся в памяти:

x  = 10 
print (id(x)) 
print (id(10))

Вывод :

140731768218288

140731768218288

Насколько я понимаю: 10 хранится по адресу памяти 140731768218288, а x указывает на 10. Целое число 10 было создано в памяти как неизменяемый целочисленный объект.

x  = x + 1
print (id(x)) 
print (id(11))
print (id(10))

Выход :

140731768218320

140731768218320

140731768218288

Мое понимание: 10 по-прежнему сохраняется по адресу памяти 140731768218288. В то же время целое число 11 было создано как неизменяемый объект по адресу памяти 140731768218320, и указатель x был переназначен на этот адрес.

Вопрос : может ли адрес памяти, где хранится 10 как-нибудь очистить? (опять же, пример, который я имею в виду, представляет собой вычислительно эффективный код, который имеет дело с большими числами с плавающей запятой, где кажется ненужным хранить «предыдущие» значения в памяти, если они не будут повторно использоваться для каких-либо «будущих» целей).

1 Ответ

2 голосов
/ 16 июня 2020

CPython имеет особое место для всех чисел в диапазоне (-5, 256)

Это своего рода оптимизация, которую они сделали для этих более низких чисел, я думаю, это улучшение производительности, вы можете видеть это в коде CPython. (Таким образом они избегают большого количества создания и отвлечения нового PyObject) * Это верно только для CPython. Каждая реализация python может реализовать этот механизм по-разному

...