码迷,mamicode.com
首页 > 其他好文 > 详细

关于在元祖中+=

时间:2017-06-12 13:07:24      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:python   ssi   产生   traceback   nbsp   lin   support   error:   ast   

先看一个例子:

>>> t  = (1,2,[30,40])
>>> t[2] += [50,60]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ‘tuple‘ object does not support item assignment
>>>
>>> t
(1, 2, [30, 40, 50, 60])

这里产生了一个非常奇怪的现象:本来元祖的元素是不可变的,所以在操作的时候,报了TypeError错误,但是元祖的元素的确实被改变了;

 

实际上,在赋值语句的时候,如果我们把t[2]当做一个普通变量,因为其值是可变的对象,所以,赋值赋值操作可以完成,但是,当在重新赋值后的对象被放入元祖的时候,报错了;而且错误之后,之前的赋值操作也没有回退;

说明:这样的赋值操作不是原子性的;

为了避免这种操作,元祖中包含可变对象,可以使用如下操作避免报错:

t = (1,2,[30,40])
t[2].extend([50,60])
print(t)

 

这样:可以看到+=和extend的差别了吧!

在实际工作中,元祖的元素不建议使用可变的对象;

关于在元祖中+=

标签:python   ssi   产生   traceback   nbsp   lin   support   error:   ast   

原文地址:http://www.cnblogs.com/cqq-20151202/p/6992156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!