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

在图片中,两个标注的地方都显示有错误,但第二种情况起效果了
在测试元组的可变性时,出现如上的情况。在元组中包含有可变元素列表,当使用运算符“+”(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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值