首頁  >  文章  >  後端開發  >  Python 的字串連線有多高效,何時優化?

Python 的字串連線有多高效,何時優化?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 00:27:29984瀏覽

 How Efficient Is Python's String Concatenation, and When Does It Optimize?

如何在 Python 中有效地將一個字串附加到另一個字串?

將一個字串附加到另一個字串時,效率很高最佳化操作,特別是對於多個串聯的場景。問題中所描述的傳統方法 var3 = var1 var2 並不總是最有效的。

CPython Optimization

CPython,Python 的預設實現,當僅存在一個對初始字串的引用時,對字串連接採用特定的最佳化。此最佳化嘗試就地擴展字串,從而導致攤銷 O(n) 操作。這表示對於以下場景:

s = ""
for i in range(n):
    s += str(i)

,先前的時間複雜度為 O(n^2),現在的速度明顯更快,為 O(n)。

實作詳細資訊

CPython 的最佳化是在 bytesobject.c 中的 _PyBytes_Resize 函數中實現的。它為字串物件重新分配內存,將其大小增加指定的量。如果成功,它會更新字串的大小並設定尾隨空位元組以終止字串。

經驗驗證

​​>

要憑經驗示範此最佳化,請考慮以下內容timeit 結果:

$ python -m timeit -s"s=''" "for i in xrange(10):s+='a'"
1000000 loops, best of 3: 1.85 usec per loop
$ python -m timeit -s"s=''" "for i in xrange(100):s+='a'"
10000 loops, best of 3: 16.8 usec per loop
$ python -m timeit -s"s=''" "for i in xrange(1000):s+='a'"
10000 loops, best of 3: 158 usec per loop
$ python -m timeit -s"s=''" "for i in xrange(10000):s+='a'"
1000 loops, best of 3: 1.71 msec per loop
$ python -m timeit -s"s=''" "for i in xrange(100000):s+='a'"
10 loops, best of 3: 14.6 msec per loop
$ python -m timeit -s"s=''" "for i in xrange(1000000):s+='a'"
10 loops, best of 3: 173 msec per loop

對於較小的字串,開銷很小,但隨著字串大小的增加,最佳化方法的效率顯著提高。

注意

;

需要注意的是,這種最佳化並不是 Python 規範的一部分。它是 CPython 的特定實作細節,可能不會出現在 PyPy 或 Jython 等其他 Python 實作中。

以上是Python 的字串連線有多高效,何時優化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn