如果我这么做的话,StringIO会共享内存吗?我觉得这是因为python进程的内存在第6行没有增加。在
In [1]: from StringIO import StringIO
In [2]: s = StringIO()
In [3]: s.write('abcd'*10000000) # memory increases
In [4]: s.tell()
Out[4]: 40000000
In [5]: s.seek(0)
In [6]: a = StringIO(s.read()) # memory DOES NOT increase
In [7]: a.tell()
Out[7]: 0
In [8]: a.read(10)
Out[8]: 'abcdabcdab'
然而,我担心的是,当我删除这两个变量时,python进程的内存消耗不再减少。。。为什么?此代码是否造成内存泄漏?在
当我只使用一个变量时,当我删除变量时,内存会得到很好的释放。在
我很想更好地了解这里发生了什么。 谢谢。在
一个
StringIO()
对象不会生成传递给它的字符串的副本。没有必要,因为字符串是不可变的。在当从
StringIO()
对象中分块读取数据时,将从原始输入字符串中创建新的字符串对象。在释放对象时内存消耗不会立即下降。内存分配只在操作系统需要时重新分配,许多类型的(小的)对象可以被Python捕获以提高效率,并且永远不会被释放,只能重用。在
相关问题 更多 >
编程相关推荐