字符串的拼接可以使用+和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越快。。。。。望大神指点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值