如果你说 a+=b 是 a=a+b 的简单写法,那你只说对了一半,你还没有弄清楚 += 这种操作符的真正含义。
成都创新互联公司主要从事做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务嘉兴,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
这两种操作的结果都是 a=a+b, 但左边的 a 和 右边的 a 还是同一个对象么?当弄不清楚的时候,我们可以在 Python 解释器中试验一下。
- >>> a = 1
- >>> id(a)
- 4420422336
- >>> a = a + 2
- >>> id(a)
- 4420422400
- >>>
- >>> a = 1
- >>> id(a)
- 4420422336
- >>> a += 2
- >>> id(a)
- 4420422400
- >>>
可以看出,两种方式之后,a 与原来的 a 的 id 不同,它们不再是同一个对象,也就是说当 a 是数字的时候,a+=b 是 a=a+b 的简单写法,那么当 a 是列表的时候呢?
- >>> a = [1]
- >>> id(a)
- 140401184850560
- >>> a = a + [2]
- >>> id(a)
- 140401184297216
- >>>
- >>> a = [1]
- >>> id(a)
- 140401184850560
- >>> a += [2]
- >>> id(a)
- 140401184850560
- >>>
可以看出,当 a 是列表时,a += b,中的 a 与原来的 a 的 id 是同一个,说明 a += b 并没有创建新的对象,而 a = a+b 新创建了一个新的对象,创建对象是有成本的,因此在这种情况下, a+=b 的性能是比较高的,这一点可以验证:
两种方法都执行 10 万次时,性能相差 1900 倍。
总结一下,对不可变对象, a+=b 就是 a=a+b 的简单写法,比如数字,字符串,元组。请注意,元组也是可以 a+=b、a=a+b 的哦,元组的不可变,指的是这个元组指向的对象不可变,但是元组变量却是可以指向新的元组的。
对于可变对象,a+=b 在 a 的基础上进行自增,不创建新对象,而 a=a+b,创建了新的对象,然后再让变量 a 指向这个新创建的对象,涉及创建对象的操作,因此性能较差。可变对象有列表,字典,集合,类似的,a=a*b 与 a*=b 也是一样的,不过只有列表才支持 + 和 * 这种运算符。
现在你应该明白了 a=a+b 与 a+=b, a=a*b 与 a*=b 的区别。对于列表而言,a*=b、a*=b是在原有列表上原地进行操作,不创建新的对象,性能会更高效。
有时候越简单的问题,越是被人忽略,却藏着不少细节,技术的道路上,细节是魔鬼,搞懂细节,也是提升技术水平的方法。
网站名称:Python中a=a+b与a+=b有什么不同?
文章位置:http://www.shufengxianlan.com/qtweb/news30/278280.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联