1

即使 int 值已被删除,Python 也会保留分配给 int 值的空间,如下所示:

age = 9999
del age

内存存储的变量age将用于存储其他int值,因此永远不会为此内存调用free函数,但我不知道字符串对象是否使用相同的策略来管理内存?我的意思是永远不会释放字符串的内存分配。

为什么 python 永远不会为 int 对象释放内存,请阅读此博客: http ://www.laurentluce.com/posts/python-integer-objects-implementation/

python 将管理一个 free_list(python-2.7.3 source code:intobject.c line:45) 来保存一个 int 对象的每个内存分配,并且永远不会释放它

4

2 回答 2

4

Python 为您管理所有内存。如果一个值被一个名称引用,它将保留在内存中。一旦一个值不再被任何名称引用,解释器就可以自由地回收内存。您不必担心这一点。

我不明白你的例子,或者你为什么认为“年龄”使用的内存会被再次使用。请记住,Python 名称不像 C 变量:它们不代表分配的内存。它们是可以引用值的标签。

于 2013-01-27T15:46:04.963 回答
2

如果您查看 python 字符串实现,您会发现相关行:

op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);

这表明字符串只是使用 python 的 malloc 分配的。他们不使用像整数这样的池,因为 python 字符串对象的大小取决于字符串的长度。所以你不能像处理整数一样使用池。

See: http://www6.uniovi.es/python/dev/src/c/html/stringobject_8c-source.html

于 2013-01-27T16:01:35.890 回答