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