Python学习:元组中的“+=”的操作思考

Python学习:元组中的“+=”的操作思考_第1张图片
在测试元组的可变性时,出现如上的情况。在元组中包含有可变元素列表,当使用运算符“+”(1)和“+=”(2)时,出现了不一样的结果。两种情况都出现了错误,但第(2)种情况的结果却起作用了。
在参考了网上的文章和与同行交流后,进行如下解析:
1.注意“+ ”和“ += ”的区别:“+=”背后的魔法方法是__iadd__;“+”背后的魔法方法是__add__。当变量为“可变数据类型”时, ‘+=’ 不创建新对象。例如列表、字典;当变量为“不可变数据类型”时,不管是‘+’还是‘+=’,都得创建新对象。这是Python对immutable类型的处理机制。
2.对上图中出现的问题,一同行(感谢同行)给出如下解释:
(+=)An augmented assignment evaluates the target and the expression list, performs the binary operation specific to the type of assignment on the two operands, and assigns the result to the original target.
根据文档中的描述:
(1)+=语句首先计算x[0],
(2)然后根据x[0]和[10]的类型来决定具体的二值操作。由于二者都是列表,列表的+=操作是一个就地(in place)的连接操作,所以x[0]对应的列表被修改(但不是通过赋值进行的)了。
(3)接下来要将结果assign回x[0],但由于x本身是一个元组,x[0]被赋值本身就是不被允许的,所以触发了错误。

参考如下博文:
https://www.cnblogs.com/raind/p/10116950.html

你可能感兴趣的:(Python学习)