美文网首页
Python元祖 tuple 内部列表添加元素相关

Python元祖 tuple 内部列表添加元素相关

作者: 楠木cral | 来源:发表于2020-09-18 17:27 被阅读0次

    面试python遇到的一道数据类型基础题
    我们都知道python中不可变类型有tuple,但是如果tuple里面的列表增加元素会怎么样呢?
    先看代码:

    a = (1,2,3,[4,5])
    print(a[3])   # [4, 5]
    a[3].append(6)
    print(a)  # (1, 2, 3, [4, 5, 6])
    
     a[3] += [9]
    """Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    """
    print(a)  # (1, 2, 3, [4, 5, 6, 9])
    
    a[3] = a[3] + [10]
    """Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    """
    print(a)  # (1, 2, 3, [4, 5, 6, 9])
    

    我们发现:
    (1)当元祖a里面有列表[4,5],我们进行a[3].append(6)操作时,成功添加"6"没任何问题.
    (2)当我们使用 += 的时候a[3] += [9],就报错了,但是最后还是成功添加进去了
    (3)然后我们使用 a[3] = a[3] + [10]的时候,发现也报错但是并没有加进去
    其实报错的原因是因为赋值=的时候,我们不能修改元祖的元素地址(这也是元祖不可变的原因),
    我们可以修改元祖的可变元素(比如列表)的值,但是不能修改地址,所以不能用赋值符号
    而修改值的操作比如extend(),append(),remove()是在原有内存区间修改值,以及比较特殊的+=是先进行值的修改再赋值,所以在原有的基础上增加成功,但是赋值操作失败报错了,也就是为啥还能修改成功的原因

    相关文章

      网友评论

          本文标题:Python元祖 tuple 内部列表添加元素相关

          本文链接:https://www.haomeiwen.com/subject/irvjyktx.html