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