由于python执行slice-by-copy,切片字符串可能非常昂贵。
我有一个在字符串上运行的递归算法。具体来说,如果函数传递一个字符串a
,该函数会在传递的字符串的a[1:]
上调用它自己。挂起的是字符串太长,逐个复制机制正在成为一种非常昂贵的删除第一个字符的方法。
有没有办法解决这个问题,还是我需要完全重写算法?
解决这个问题的唯一方法是使你的算法使用类似bytes
的类型,Py2 str
或Py3 bytes
;不支持Py2 unicode
/ Py3 str
的观点。我提供了有关如何在my answer上执行a related question的详细信息,但是短版本是,如果你可以假设bytes
类似的参数(或转换为它们),将参数包装在memoryview
中并且切片是一个合理的解决方案。一旦转换为memoryview
,切片产生新的memoryview
s与O(1)
成本(在时间和记忆中),而不是文本切片的O(n)
时间/内存成本。