None 内存位置

None memory location

当我在 Python 解释器中键入 id(None) 时,我得到 9545840。我可以打开另一个终端并做同样的事情,即使第一个终端已关闭,我也会得到相同的结果,所以显然 None 已在内存中分配了一个已保留的位置。什么时候决定那个内存位置?它是在每次重新启动时发生变化,还是在安装 Python 时决定的?在不同的计算机上是否不同?

None 的内存位置是静态分配的。它是在编译 python 时设置的。所以不同版本的CPython有不同的id。

在 CPython 实现中 None 声明为静态全局对象:

PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */
#define Py_None (&_Py_NoneStruct)

这意味着您很可能会得到相同的结果,只要您使用相同版本的解释器,为相同的环境和相同的编译选项构建。

然而,Python 的文档中并未具体说明,因此其他 Python 实现的行为可能有所不同。唯一的保证是它在 None 对象的生命周期内保持不变,即解释器的单次执行。