как работает переменная python? - PullRequest
2 голосов
/ 19 июня 2020

Как переменные работают в python? Я попытался понять это, присвоив значение переменной (a) и проверив ее адрес в памяти, но когда я изменил значение этой переменной (a), я получил другой адрес памяти. В чем причина этого? и этот адрес памяти находится в области стека памяти? и его масштаб?, когда я вызываю del a, был удален только идентификатор переменной ('a'). но он все еще находится в памяти. После я вызываю id (3), затем этот адрес памяти в коде раздел памяти? и как python переменные хранятся в памяти? Кто-нибудь может объяснить подробнее?

Код:

#!/usr/bin/python3
import _ctypes
a=45
s=id(a)
print(s)
a=a+2
d=id(a)
print(d)
print(_ctypes.PyObj_FromPtr(s))
del a
print(_ctypes.PyObj_FromPtr(d))
print(id(3))

Вывод:

10915904
10915968
45
47
10914560

1 Ответ

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

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

Поскольку маленькие целые числа используются так часто, CPython всегда сохраняет числа от -5 до 256 в памяти и использует эти сохраненные целые объекты всякий раз, когда эти числа появляются. Это означает, что все экземпляры, скажем, 5 будут иметь один и тот же адрес памяти.

>>> a = 5
>>> b = 5
>>> id(a) == id(b)
True
>>> c = 4
>>> id(a) == id(c)
False
>>> c += 1
>>> id(a) == id(c)
True

Это не будет верно для других целых или нецелых значений, которые создаются только при необходимости:

>>> a = 300
>>> b = 300
>>> id(a) == id(b)
False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...