zoukankan      html  css  js  c++  java
  • 关于在元祖中+=

    先看一个例子:

    >>> 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的差别了吧!

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

  • 相关阅读:
    2020.4.10个人总结
    CG-CTF simple machine
    CG-CTF Our 16bit wars
    CG-CTF Our 16bit Games
    CG-CTF single
    CG-CTF WxyVM2
    Go Channel 详解
    Go语言TCP Socket编程
    golang mysql demo
    YouCompleteMe unavailable: requires Vim compiled with Python 2.x support
  • 原文地址:https://www.cnblogs.com/cqq-20151202/p/6992156.html
Copyright © 2011-2022 走看看