字符串的拼接可以使用+和join完成,两者有什么区别?

(1)使用+:
由于字符串在py中属于不可变对象,如果要连接如下字符串:s1+s2+s3+.......+sN,执行一次+操作便会在内存中申请一块新的内存空间,并将上一次操作的结果和本次操作的右操作数复制到新申请的内存空间,即当执行s1+s2的时候会申请一块内存,并将s1、s2复制到该内存中,依次类推,这样就要进行N-1次内存空间的申请了,非常影响效率。
(2)当使用join时,会一开始就计算出所需要的总的内存空间,也就是说只需要进行一次内存空间的申请,相比 使用 + ,效率提升巨大。
import timeit
strlist = ["It is a long value string will not keep in memory" for n in range(100000)]
def join_test():
    return ''.join(strlist)
def jia_test():
    res = ''
    for k,v in enumerate(strlist):
        res = res + v
    return res


if __name__ == '__main__':
    joinTm = timeit.Timer("join_test", "from __main__ import join_test")
    #print(joinTm.timeit(number=100000000)) #1.0149533
    print(joinTm.timeit(number=10000000000)) #101.60292290000001
    jiaTm = timeit.Timer("jia_test", "from __main__ import jia_test")
    #print(jiaTm.timeit(number=100000000)) #1.0162013
    print(jiaTm.timeit(number=10000000000)) #101.61203029999999
#PS为啥我测不出差距所在呢???奇怪看了好多帖子都说拼接次数越多的时候join越快。。。。。望大神指点

Guess you like

Origin blog.csdn.net/sasibingdu/article/details/121829478