没有内存位置

时间:2016-02-14 21:21:34

标签: python memory nonetype

当我在Python解释器中输入id(None)时,我得到9545840。我可以打开另一个终端并执行相同的操作,即使第一个终端已经关闭,我也会得到相同的结果,因此很明显None已经在内存中分配了一个已保留的位置。什么时候确定内存位置?它是在每次重启时都会发生变化的,还是在安装Python时决定的?它在不同的计算机上是不同的吗?

2 个答案:

答案 0 :(得分:2)

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

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

这意味着只要您使用相同版本的解释器,您就可能获得相同的结果,这些解释器是为具有相同编译选项的相同环境构建的。

然而,这并未在Python的文档中指定,因此其他Python实现可能表现不同。唯一的保证是它在None对象的生命周期内是常量,即单次执行解释器。

答案 1 :(得分:1)

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