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

如果删除字符串引用,python会释放内存吗?,python,Python,Python将保留为int值分配的空间,即使int值已被删除,如下所示: age = 9999 del age 内存存储变量age将用于存储其他int值,因此,将永远不会为此内存调用free函数,但我不知道string对象是否使用相同的策略来管理内存?我的意思是字符串的内存分配永远不会被释放 关于python永远不会为int对象释放内存的原因,请阅读以下博客: python将管理一个自由列表(python-2.7.3源代码:intobject.c 第45行)保存int对象的所有内存分配,并且

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

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

关于python永远不会为int对象释放内存的原因,请阅读以下博客:

python将管理一个自由列表(python-2.7.3源代码:intobject.c 第45行)保存int对象的所有内存分配,并且永远不会 解除锁定


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


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

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


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

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

op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
这表明字符串只是使用python的malloc分配的。它们不像整数那样使用池,因为python字符串对象的大小取决于字符串的长度。所以不能像对整数那样使用池


请参阅:

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

op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
这表明字符串只是使用python的malloc分配的。它们不像整数那样使用池,因为python字符串对象的大小取决于字符串的长度。所以不能像对整数那样使用池


请参阅:

您能解释一下为什么认为内存不会被释放吗?CPython会缓存一些低整数值(因为它们是不可变的)。然而,这是一个实现细节。你能解释一下为什么你认为内存不会被释放吗?CPython会缓存一些低整数值(因为它们是不可变的)。然而,这是一个实现细节。