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