鱼C论坛

 找回密码
 立即注册
查看: 4180|回复: 16

[已解决]不是说tuple不能直接改元素吗

[复制链接]
发表于 2018-5-18 16:35:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
tuple1 = '小甲鱼',['黑夜','迷途,小布丁']
tuple1[1].insert(1,'怡景')
tuple1

通过上面的语句,我也没有将tuple1进行切片就直接修改了其中的元素了啊
最佳答案
2018-5-18 16:39:43
tuple本身不能修改,但是如果它的元素是可变的,比如列表,那么这个元素本身可以被修改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-5-18 16:39:43 | 显示全部楼层    本楼为最佳答案   
tuple本身不能修改,但是如果它的元素是可变的,比如列表,那么这个元素本身可以被修改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 16:41:33 | 显示全部楼层
hi 原因如下:
tuple1[1] 是列表,因此可以使用insert方法。示例:
>>> tuple1[1]
['黑夜', '迷途,小布丁']
>>> type(tuple1[1])
<class 'list'>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:11:41 | 显示全部楼层
BngThea 发表于 2018-5-18 16:39
tuple本身不能修改,但是如果它的元素是可变的,比如列表,那么这个元素本身可以被修改

但是这个列表也是tuple中的元素啊,和字符串一个等级啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:14:45 | 显示全部楼层
thexiosi 发表于 2018-5-18 16:41
hi 原因如下:
tuple1[1] 是列表,因此可以使用insert方法。示例:
>>> tuple1[1]

也就是说有个tuple1[1]的标签一直在贴在list上,你不能直接修改tuple1[1]只有读取作用,不具有写入作用,因此当我们原地改变list的时候,tuple1[1]的值也就变了,对吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 17:19:57 | 显示全部楼层
zhdwinter 发表于 2018-5-18 17:11
但是这个列表也是tuple中的元素啊,和字符串一个等级啊

这个元素本身是可变的,所以可以修改,字符串等是不可变的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 17:25:41 | 显示全部楼层
zhdwinter 发表于 2018-5-18 17:14
也就是说有个tuple1[1]的标签一直在贴在list上,你不能直接修改tuple1[1]只有读取作用,不具有写入作用, ...

对,tuple1[1] 指向了一个列表,当你通过insert()方法改变这个列表后,tuple1[1]跟着改变。tuple1[1] 是 元祖tuple1中的一个元素,它的类型是列表,因此可以使用insert()方法

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:31:37 | 显示全部楼层
thexiosi 发表于 2018-5-18 17:25
对,tuple1[1] 指向了一个列表,当你通过insert()方法改变这个列表后,tuple1[1]跟着改变。tuple1[1] 是  ...

因为我调用的list的函数都是没有返回值的,也就是list是在原地变化的,所以我以为只要是原地变化的量都可以反馈会tuple1[]中,因此我在tuple后面新增了一个数字1,我使用原地加法对其进行赋值,tuple1[2] += 1,
结果报错了提示不能修改。看来list是个特例
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 17:37:36 | 显示全部楼层
zhdwinter 发表于 2018-5-18 17:31
因为我调用的list的函数都是没有返回值的,也就是list是在原地变化的,所以我以为只要是原地变化的量都可 ...

嗯,主要是看元祖中的元素是否支持对应的方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:42:49 | 显示全部楼层
BngThea 发表于 2018-5-18 17:19
这个元素本身是可变的,所以可以修改,字符串等是不可变的

好的,可能list是个特例
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 17:46:40 | 显示全部楼层
>>> type(tuple1[1])
<class 'list'>

tuple1[1]  元组的内部列表了。
元组从来就没有insert 方法好吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 17:55:26 | 显示全部楼层
ba21 发表于 2018-5-18 17:46
>>> type(tuple1[1])

我知道元组没有insert啊,我用insert改变的是元组中的list啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 18:05:05 | 显示全部楼层
zhdwinter 发表于 2018-5-18 17:55
我知道元组没有insert啊,我用insert改变的是元组中的list啊

所以没毛病啊,列表有insert方法,关外面的tuple干嘛。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 18:07:46 | 显示全部楼层
tuple1 = '小甲鱼',['黑夜','迷途,小布丁'] // 你这个定义就不是元组!是列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 18:19:42 | 显示全部楼层
秋木叶 发表于 2018-5-18 18:07
tuple1 = '小甲鱼',['黑夜','迷途,小布丁'] // 你这个定义就不是元组!是列表

这个你真的弄错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-18 18:20:57 | 显示全部楼层
新手·ing 发表于 2018-5-18 18:05
所以没毛病啊,列表有insert方法,关外面的tuple干嘛。

我的意思是我直接通过修改list实现了修改tuple的功能,并没有通过切片的方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-18 18:35:36 | 显示全部楼层
zhdwinter 发表于 2018-5-18 18:19
这个你真的弄错了

学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 20:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表