问题:如何在 Python 中有效地将一个字符串附加到另一个字符串?下面的代码有更快的替代方法吗?
<code class="python">var1 = "foo" var2 = "bar" var3 = var1 + var2</code>
答案:
CPython,主要的 Python 实现,现在通过尝试扩展字符串来优化字符串连接当仅存在一个对字符串的引用时就到位。此优化导致摊销 O(n) 时间复杂度。
例如,以下代码:
<code class="python">s = "" for i in range(n): s += str(i)</code>
其过去的时间复杂度为 O(n^2),是现在 O(n)。
技术细节:
在 CPython 实现中,_PyBytes_Resize 函数负责此优化。它允许在不创建新对象的情况下调整字符串大小,前提是只有一个模块引用原始字符串。
性能分析:
实证测试表明性能显着提升对于字符串连接操作:
String Size | Concatenation Time (CPython) |
---|---|
10 | 1.85 usec |
100 | 16.8 usec |
1,000 | 158 usec |
10,000 | 1.71 msec |
100,000 | 14.6 msec |
1,000,000 | 173 msec |
重要提示:
此优化特定于 CPython,可能不会出现在其他 Python 实现中,例如 PyPy 或 Jython 。在这些情况下,字符串连接性能可能与 CPython 实现不同。
以上是Python 中的字符串连接:是否有更快的方法来附加字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!