序列的增量赋值 +=和*=

Posted 阿里山QQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列的增量赋值 +=和*=相关的知识,希望对你有一定的参考价值。

+=的实现是通过__iadd__实现的,如果类中没有实现__iadd__方法,那么就会调用__add__方法;

可变序列:调用的是__iadd__方法;

不可变序列:调用的是__add__方法;

+和*操作都会先创建新的对象,然后做拼接操作;

__iadd__不会创建新的序列,而是在原来的序列上做增量操作;

 

不可变序列不会调用__iadd__方法,所以必然会创建新的序列,造成资源的浪费,所以不可变序列使用+=和  +操作效果是相同的(str除外);

 

l = [1,2,3]
print(id(l))
l *= 2
print(l)
print(id(l))
t = (1,2,3)
print(id(t))
t *= 2
print(id(t))


17505976
[1, 2, 3, 1, 2, 3]
17505976
17269984
17085080

 

以上是关于序列的增量赋值 +=和*=的主要内容,如果未能解决你的问题,请参考以下文章

记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值,成功赋值但还报错

《Python学习手册 第五版》 -第11章 赋值表达式和打印

《Python基础教程》

条件循环和其他语句

python 基础知识点 解压序列赋值给多个变量

C++17 排序:赋值左侧的后增量