+=背后的特殊方法是__iadd__(用于就地加法),若a实现了iadd的方法就会调用这个方法,如果没实现,则a+=b这个表达式的效果就是a = a+b一样:首先计算a+b 得到一个性的对象,然后赋值给a
也就是说在这个过程中,变量名会不会被关联到新的对象,
完全取决于这个类型有没有实现__iadd__这个方法
可变序列一般都实现了这个方法,也就是说+=就是就地加法。
而不可序列不支持这个操作
不可变序列
l = (1, 2, 4) print(id(l)) l = l*2 print(id(l)) l*=2 print(id(l))
可变序列
l = [1, 2, 4] print(id(l)) l = l*2 print(id(l)) l*=2 print(id(l))
不可变序列
s = (1, 3, 4) print(id(s)) s *= 2 print(id(s))
可变序列
s = [1, 3, 4] print(id(s)) s *= 2 print(id(s))
上述代码运行后,则可得出上述总结,id不同则是创建了新的对象