先来看段代码,分别使用join()方法和+操作符来连接十万个字符串,然后算出执行时间,文章会从C语言源码的角度来说明为什么会存在这样的效率差异
首先是+操作符,总共花费24.838000 seconds
另一个是join()方法,总共花费0.222000 seconds
这样差异就看出来啦,要注意的是这里的差异是由于太多字符串连接操作导致,如果只是一两个字符串连接,用+操作符会来的更简单。
本篇文章主要是解释出现这种效率差异的背后C语言源码是如何定义join()方法和+操作符的,底层的C是以PyStringObject对象来定义字符串的,+操作符效率低的原因是在Python定义的PyStringObject对象是个不可变对象。
这表示连接字符串时,必须创建新的PyStringObject对象,连接100000个PyStringObject对象,必须进行99999次的内存申请和搬运的工作,而join()方法仅仅对列表或元组中的一组PyStringObject对象进行连接操作,只需要分配一次内存,所以效率会高。
来看底层C语言源码是如何定义+操作符的,可以查看Objects\stringobject.c内容,此源码可在Python官网下载,不会查看上篇文章《【Python研发】从小整数对象池切入对C语言源码的理解》
对应的join()方法是string_join()函数
领取专属 10元无门槛券
私享最新 技术干货