章节
问答
课签
笔记
评论
占位
占位

Python的可变tuple

前面我们学习了,对于tuple,它和list一个最大的不同点就是tuple是不可变的,tuple里面的元素,也是不可替换的。但是这针对的是仅包含基础数据类型(数字类型、布尔类型、字符串类型)的数据,对于组合数据类型,则不受这个约束。

T = (1, 'CH', [3, 4])

这里T有三个元素,第一个元素是数字类型,第二个元素是字符串类型,第三个元素是列表类型的,我们尝试修改第三个元素的数据。

T = (1, 'CH', [3, 4])
L = T[2]
print(L) # ==> [3, 4]
# 尝试替换L中的元素
L[1] = 40
print(L) # ==> [3, 40]
print(T) # ==> (1, 'CH', [3, 40])

这个时候,我们发现,元组T中的第三个元素已经成功被改变了,这就有悖前面的定义,元组是不可改变的。那么这到底是为什么呢?
这是因为虽然tuple中的list元素改变了,但是tuple本身指向的list仍然是同一个list,list本身并没有改变,改变的只是list里面的一个元素,这是tuple所约束不到的范围。

T = (1, 'CH', [3, 4])
L2 = [3, 40]
# 尝试替换tuple中的list
T[2] = L2
# 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

如果我们直接替换list,这也是不行的。

任务

T = (1, 'CH', [3, 4])
tuple里面包含list,导致tuple是可变的,请修改T的定义,不改变基本数据类型的数据,使T是不可变的。

?不会了怎么办

参考答案:

T = (1, 'CH', (3, 4))
print(T)
||
1
2
# Enter a code
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最赞回答 / 時頌望見
元组T = (1, 'CH', [3, 4])内的这几个元素的类型是不能改变的,[3,4]是T的一个元素,并且不是元组,所以它的值可变;但是它的类型是不可变的

最赞回答 / XLV
<...code...>

最赞回答 / GrayspaceDragon
tuple 是不可变的 他是有针对性的,针对一般的数据类型,比如说  int string 但是他不针对列表,在某种意义上讲,tuple里面的list是不变的 变化的是list里面的值

已采纳回答 / corySoft
[3,4]为list,为引用类型,当其他变量赋其值的时候,赋的其实是他的一个内存地址,指向[3,4],当其他变量进行索引赋值,直接导致内存中的list改变。也就是你所说的L和T[2]其实指向了一个内存地址,修改了一个另一个也会跟着变

最新回答 / Abtract_Artist
通过两个步骤将元组里的元素改变

最赞回答 / 慕妹2561822
这显然不行,你已经把列表的形式改变了,那原来的tuple指针指到哪?

已采纳回答 / 慕设计6518189
不能改变基本数据类型的‘数据’,没有改变数据,还是3,4

最赞回答 / qq_慕妹1564823
类似于c语言的指针, c++的引用
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言