python元组列表里追加元素_Python元祖 tuple 内部列表添加元素相关

面试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 "", line 1, in

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 "", line 1, in

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()是在原有内存区间修改值,以及比较特殊的+=是先进行值的修改再赋值,所以在原有的基础上增加成功,但是赋值操作失败报错了,也就是为啥还能修改成功的原因

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值