鱼C论坛

 找回密码
 立即注册
查看: 2395|回复: 3

[已解决]关于元组内部元素插入新元素的疑问?

[复制链接]
发表于 2017-8-31 16:21:15 | 显示全部楼层 |阅读模式

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

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

x

大神们好:

不是说元组是不能修改的吗?这里添加了一个新元素不算是修改?
temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)
# 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该:
temp = temp[:2] + (‘怡静’,) + temp[2:]
最佳答案
2017-8-31 16:41:27
先看一下,什么是可以修改?
temp = (1, 2, 3)
temp = (4, 5, 6)
这样不算修改,python中对可变变量的定义为在原地址直接修改变量的值,而不是把变量名又“贴到”另一处内存地址的变量中。
举个例子:我们都说列表是可变变量。
>>> list1 = [1, 2, 3] #定义一个列表
>>> id(list1) #它的地址
57168200
>>> list1.append(4)#给它增加一个元素
>>> list1
[1, 2, 3, 4]
>>> id(list1)#仍是原来的地址
57168200
这就说明此变量是可变的。

相反,我们再进行下面的操作
>>> list1
[1, 2, 3, 4]
>>> id(list1)
57168200
>>> list1 = ['a', 'b', 'c']#对其重新赋值
>>> id(list1)#地址变了
57141568

即使是可变变量,重新赋值,也会改变地址,就是不可变的操作。

因此:
可变是指在内存原址改变
不可变的改变是指在一个新内存地址做一个新值,并把原变量名贴到新地址上。

你上面的操作就是这样的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-31 16:33:08 | 显示全部楼层
不算,原来的元组还在,你只是将temp指向了拼接后的元组,你不要temp=.......,这个,你输出temp,还是原来的,你这样只是改变了指向,并没有改变元组!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-31 16:41:27 | 显示全部楼层    本楼为最佳答案   
先看一下,什么是可以修改?
temp = (1, 2, 3)
temp = (4, 5, 6)
这样不算修改,python中对可变变量的定义为在原地址直接修改变量的值,而不是把变量名又“贴到”另一处内存地址的变量中。
举个例子:我们都说列表是可变变量。
>>> list1 = [1, 2, 3] #定义一个列表
>>> id(list1) #它的地址
57168200
>>> list1.append(4)#给它增加一个元素
>>> list1
[1, 2, 3, 4]
>>> id(list1)#仍是原来的地址
57168200
这就说明此变量是可变的。

相反,我们再进行下面的操作
>>> list1
[1, 2, 3, 4]
>>> id(list1)
57168200
>>> list1 = ['a', 'b', 'c']#对其重新赋值
>>> id(list1)#地址变了
57141568

即使是可变变量,重新赋值,也会改变地址,就是不可变的操作。

因此:
可变是指在内存原址改变
不可变的改变是指在一个新内存地址做一个新值,并把原变量名贴到新地址上。

你上面的操作就是这样的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-1 11:11:00 | 显示全部楼层
冬雪雪冬 发表于 2017-8-31 16:41
先看一下,什么是可以修改?
temp = (1, 2, 3)
temp = (4, 5, 6)

还是没太明白   根据你的提示    有点了解的是   往存储位置添加或者改变元素 列表的地址是不会变的, 而往元组的内存位置改变元组  内存地址会发生变化       我再查查资料
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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