Python 中的字符串是不可变的,并且支持缓冲区接口。.split()
在使用切片或方法时,不返回新字符串,而是返回指向旧字符串部分的缓冲区可能是有效的。但是,每次都会构造一个新的字符串对象。为什么?我看到的唯一原因是它会使垃圾收集变得更加困难。
是的:在常规情况下,内存开销是线性的并且不明显。复制很快,分配也很快。但是在 Python 中已经做了太多的事情,所以也许这样的缓冲区值得付出努力?
编辑:
似乎以这种方式形成子字符串会使内存管理更加复杂。仅使用 20% 的任意字符串,而我们无法释放其余字符串的情况是一个简单的示例。我们可以改进内存分配器,这样它就可以部分地释放字符串,但可能这主要是一个反证。buffer
无论如何,memoryview
如果内存变得至关重要,则可以模拟所有标准功能。代码不会那么简洁,但必须放弃一些东西才能得到一些东西。