如果删除字符串引用,python是否释放内存?

时间:2013-01-27 15:40:36

标签: python

Python将保留为int值分配的空间,即使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源代码:intobject.c   line:45)保存int对象的每个内存alloc,永远不会   dealloc it

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

如果你看一下python字符串实现,你会发现释放线:

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

这表明只使用python的malloc分配字符串。它们不使用像整数这样的池,因为python字符串对象的大小取决于字符串的长度。因此,您无法以与整数相同的方式使用池。

请参阅:http://www6.uniovi.es/python/dev/src/c/html/stringobject_8c-source.html