將一個字串附加到另一個字串時,效率很高最佳化操作,特別是對於多個串聯的場景。問題中所描述的傳統方法 var3 = var1 var2 並不總是最有效的。
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中文網其他相關文章!