python变量是如何工作的?

python变量是如何工作的?,python,python-3.x,variables,memory,Python,Python 3.x,Variables,Memory,变量在python中是如何工作的? 我试图通过给变量(a)赋值并检查它的内存地址来理解它。但是,当我更改变量(a)的值时,我得到了另一个内存地址。原因是什么?那个内存地址在内存的堆栈区域?它的范围?当我调用dela时,只有变量标识符('a')被删除。但是,它仍然在内存中。之后,我调用id(3),然后,内存代码部分的内存地址?以及python变量如何存储在内存中?有人可以解释更多吗 代码: 输出: 10915904 10915968 45 47 10914560 您看到的是CPython(最常见

变量在python中是如何工作的? 我试图通过给变量(a)赋值并检查它的内存地址来理解它。但是,当我更改变量(a)的值时,我得到了另一个内存地址。原因是什么?那个内存地址在内存的堆栈区域?它的范围?当我调用dela时,只有变量标识符('a')被删除。但是,它仍然在内存中。之后,我调用id(3),然后,内存代码部分的内存地址?以及python变量如何存储在内存中?有人可以解释更多吗

代码:

输出:

10915904
10915968
45
47
10914560

您看到的是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

请阅读以下内容:简而言之,变量只是引用对象的名称,变量本身不是内存中的一个位置,就像在C中一样。此外,解释器会缓存小的
int
对象,这就是为什么您会一次又一次地获得相同的
id
。所有python对象都分配在一个私有管理的堆上。这能回答您的问题吗?python中没有可用的指针。它们是数组的引用。然后,脚本加载到ram中,最初,它为数字(-5到256)创建变量。但是,它们位于内存的哪个部分?全球范围?
>>> a = 300
>>> b = 300
>>> id(a) == id(b)
False