前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同样都是「加」,好像我们不一样...

同样都是「加」,好像我们不一样...

作者头像
编程文青李狗蛋
发布2019-11-07 16:42:42
2520
发布2019-11-07 16:42:42
举报
本文字数:1099 字

阅读本文大概需要:3 分钟

在我们来表示「加」这个概念的时候,一般我们会用两种方式:a = a + b或者是 a += b 。在很多人的概念里这两个其实就是一种,不分彼此,比如之前我就是这么认为的,直到有一天有人拿着下面的坑过来让我踩...

首先我们先来看第一个例子:

代码语言:javascript
复制
>>> a = [1,2,3]
>>> b = a
>>> a = a + [4,5,6]

一个很简单的例子,你知道此时的 a 和 b 分别是多少么?请先自己思考一下再继续向下看:

代码语言:javascript
复制
>>> a
[1, 2, 3, 4, 5, 6]
>>> b
[1, 2, 3]

估计很多人都会答对,表达式 a = a + [4,5,6] ,等号右边其实是形成了一个新的列表,最后让 a 引用了这个新的列表,而 b = a 引用的是之前的 a,所以 b 保持不变。

明白了上面的例子,我们接下来再看一个稍微有点区别的例子:

代码语言:javascript
复制
>>> a = [1,2,3]
>>> b = a
>>> a += [4,5,6]

上面的例子和文章开头的例子区别在从 + 变成了 +=,按照我们惯性思维去想,肯定以为这俩例子就是一个东西的两种不同写法而已,可实际上真的是这样吗?让我们来看一下此时的 a,b:

代码语言:javascript
复制
>>> a
[1, 2, 3, 4, 5, 6]
>>> b
[1, 2, 3, 4, 5, 6]

咦?同样是印象里的「加」,好像真的哪里有点不一样诶。。

通过上面我们就可以看出 a = a + b 和 a += b 并不总是表现相同,起码在列表上就是这么表现的。在这里的 a += [4,5,6] 实际上使用的是 extend 函数,所以 a 和 b 仍然指向已被修改的同一列表。

既然在这里说到了 + 和 +=,索性再多补充一点:在使用「加」的概念来连接字符串的时候,+= 其实比 + 的速度更快

下面我们来实际的演示一下用 + 连接三个字符串:

代码语言:javascript
复制
>>> import timeit
>>> timeit.timeit("a = a + b + c", setup="a='a'*10000;b='b'*10000;c='c'*10000",number=100)
0.07921688999340404
>>> timeit.timeit("a += b + c", setup="a='a'*10000;b='b'*10000;c='c'*10000",number=100)
0.002059974998701364

上面的两个结果很容易看出来,在处理速度上,+= 比 + 处理的速度要快的多。出现这样现象的原因是 += 执行的是追加操作,追加操作的话就会比 + 少了一个销毁然后新建的动作,比如在 a += b + c 上 a 就不会被销毁。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档