基礎となる文字列表現は長さを追跡していてもnull-terminatedであるため、接尾辞ではない部分文字列を参照する文字列オブジェクトを持つことはできません。これは、suffice と non-suffice を異なる方法で処理するために多くの複雑さを追加するため、提案の有用性をすでに制限しています (そして、null で終わる文字列をあきらめると、他の結果がもたらされます)。
文字列の部分文字列を参照できるようにすることは、多くのガベージ コレクションと文字列の処理を複雑にすることを意味します。文字列ごとに、各文字またはインデックスの各範囲を参照するオブジェクトの数を追跡する必要があります。これは、多くstruct
の文字列オブジェクトとそれらを処理する操作が複雑になることを意味し、おそらく大幅に速度が低下します。
python3 から始まる文字列には 3 つの異なる内部表現があり、物事が面倒すぎて保守できなくなるという事実を追加してください。また、あなたの提案はおそらく受け入れられるのに十分な利点を与えていません。
この種の「最適化」のもう 1 つの問題は、「大きな文字列」の割り当てを解除する場合です。
a = "Some string" * 10 ** 7
b = a[10000]
del a
この操作の後、巨大な文字列である が割り当て解除されるのb
を防ぐ部分文字列が得られます。a
確かに小さな文字列のコピーを作成できますが、b = a[:10000]
(または別の大きな数) の場合はどうでしょうか? 10000 文字は、コピーを避けるために最適化を使用する必要がある大きな文字列のように見えますが、メガバイトのデータを解放することを妨げています。ガベージ コレクターは、大きな文字列オブジェクトの割り当てを解除してコピーを作成する価値があるかどうかをチェックし続ける必要があり、これらすべての操作はできるだけ高速である必要があります。そうしないと、時間パフォーマンスが低下します。
プログラムで使用される文字列の 99% は「小さい」(最大 10k 文字) ため、コピーは非常に高速ですが、提案する最適化は非常に大きな文字列で有効になり始めます (たとえば、巨大なテキストからサイズ 100k の部分文字列を取得する) であり、非常に小さい文字列では非常に遅くなります。これは一般的なケース、つまり最適化する必要があるケースです。
重要だと思われる場合は、自由に PEP を提案し、実装と、提案の速度/メモリ使用量の結果の変化を示してください。本当に努力する価値がある場合は、Python の将来のバージョンに含まれる可能性があります。