删除字符串引用后,Python会释放内存吗?
在Python中,即使一个整数值被删除了,系统仍然会保留为这个整数分配的内存空间,情况如下:
age = 9999
del age
存储变量年龄的内存会被用来存储其他整数值,因此这个内存空间的释放功能将永远不会被调用。不过,我不太清楚字符串对象是否也采用相同的方式来管理内存?我的意思是,分配给字符串的内存是否也永远不会被释放。
关于为什么Python不会释放整数对象的内存,可以查看这篇博客: http://www.laurentluce.com/posts/python-integer-objects-implementation/
Python会管理一个叫做free_list的列表(在Python 2.7.3的源代码中,位置在intobject.c的第45行),用来保存每个整数对象分配的内存,并且永远不会释放这些内存。
2 个回答
5
Python会帮你管理所有的内存。如果一个值被某个名字引用,它就会一直保留在内存中。一旦没有任何名字再引用这个值,解释器就可以回收这部分内存。你不需要为此担心。
我不太明白你的例子,也不明白你为什么觉得“age”这个值会被重复使用。要记住,Python中的名字和C语言中的变量不一样:它们并不代表分配的内存。它们只是可以指向值的标签。
2
如果你看看Python字符串的实现,你会发现相关的代码行:
op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
这段代码显示,字符串是通过Python的malloc来分配内存的。和整数不同,字符串的大小是根据内容的长度变化的,所以不能像处理整数那样使用内存池。
更多信息请见: http://www6.uniovi.es/python/dev/src/c/html/stringobject_8c-source.html