質問: Python で 1 つの文字列を別の文字列に効率的に追加するにはどうすればよいですか?次のコードよりも高速な代替手段はありますか?
<code class="python">var1 = "foo" var2 = "bar" var3 = var1 + var2</code>
回答:
主要な Python 実装である CPython は、文字列の拡張を試みることで文字列の連結を最適化するようになりました。文字列への参照が 1 つだけ存在する場合は、その場所に配置されます。この最適化により、時間計算量は O(n) に分割されます。
たとえば、次のコード:
<code class="python">s = "" for i in range(n): s += str(i)</code>
は、以前は O(n^2) の時間計算量でしたが、 now O(n).
技術的な詳細:
CPython 実装では、_PyBytes_Resize 関数がこの最適化を担当します。元の文字列を参照するモジュールが 1 つだけであれば、新しいオブジェクトを作成せずに文字列のサイズを変更できます。
パフォーマンス分析:
実証テストにより、大幅なパフォーマンスの向上が実証されました。文字列連結操作の場合:
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 に固有であり、PyPy や Jython などの他の Python 実装には存在しない可能性があります。 。このような場合、文字列連結のパフォーマンスは CPython 実装とは異なる可能性があります。
以上がPython での文字列の連結: 文字列を追加するより速い方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。