join的性能明顯好于+。這是為什麼呢?
原因是這樣的,Python字元串是不可變對象,當用操作符+連接配接字元串的時候,每執行一次+都會申請一塊新的記憶體,然後複制上一個+操作的結果和本次操作的右操作符到這塊記憶體空間,是以用+連接配接字元串的時候會涉及好幾次記憶體申請和複制。而join在連接配接字元串的時候,會先計算需要多大的記憶體存放結果,然後一次性申請所需記憶體并将字元串複制過去,這是為什麼join的性能優于+的原因。是以在連接配接字元串數組的時候,我們應考慮優先使用join。
from time import time
def plus_test():
t = time()
s = ''
for i in xrange(1000000):
s += 'test'
print(time() - t)
def join_test():
t = time()
li = []
for i in xrange(1000000):
li.append('test')
s = ''.join(li)
print(time() - t)
plus_test()
join_test()
輸出:
0.6990399360656738
0.09200525283813477