Pythonの文字列は、Java等と同様にImmutableであり、頻繁に文字列を操作する場合においては、気をつけないと思わぬパフォーマンスの低下を招きます。
代表的なケースとしては、文字列に新たな文字列をどんどん連結していくケース。
s = s + "新たな文字列1"
s = s + "新たな文字列2"
s = s + "新たな文字列3"
. . .
. . .
とせずに、配列を使って、
L = []
L.append("新たな文字列1")
L.append("新たな文字列2")
L.append("新たな文字列3")
. . .
. . .
s = ''.join(L)
とするのが定石イディオムとされています(最初の例では、毎回新たな文字列が生成されるオーバーヘッドがあるとされる。参考:「Pythonクックブック」)。
これは本当に正しいのでしょうか。また、mutable文字列っぽいアプローチにはどのような方法があり、どれが一番良いのでしょうか。実際に性能を確かめてみないと納得できないので、上記の単純連結ケースについて軽く調べてみました。
代表的なケースとしては、文字列に新たな文字列をどんどん連結していくケース。
s = s + "新たな文字列1"
s = s + "新たな文字列2"
s = s + "新たな文字列3"
. . .
. . .
とせずに、配列を使って、
L = []
L.append("新たな文字列1")
L.append("新たな文字列2")
L.append("新たな文字列3")
. . .
. . .
s = ''.join(L)
とするのが定石イディオムとされています(最初の例では、毎回新たな文字列が生成されるオーバーヘッドがあるとされる。参考:「Pythonクックブック」)。
これは本当に正しいのでしょうか。また、mutable文字列っぽいアプローチにはどのような方法があり、どれが一番良いのでしょうか。実際に性能を確かめてみないと納得できないので、上記の単純連結ケースについて軽く調べてみました。
Continue reading Python文字列バッファいろいろ 〜一番速い奴連れてこいシリーズ〜 .