python:StringIO之间共享内存?

2024-09-26 18:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我这么做的话,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进程的内存消耗不再减少。。。为什么?此代码是否造成内存泄漏?在

当我只使用一个变量时,当我删除变量时,内存会得到很好的释放。在

我很想更好地了解这里发生了什么。 谢谢。在


Tags: 内存infromimportread进程seekout
1条回答
网友
1楼 · 发布于 2024-09-26 18:04:22

一个StringIO()对象不会生成传递给它的字符串的副本。没有必要,因为字符串是不可变的。在

当从StringIO()对象中分块读取数据时,将从原始输入字符串中创建新的字符串对象。在

释放对象时内存消耗不会立即下降。内存分配只在操作系统需要时重新分配,许多类型的(小的)对象可以被Python捕获以提高效率,并且永远不会被释放,只能重用。在

相关问题 更多 >

    热门问题