问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python不可变性和可变性的区别

发布网友 发布时间:2022-05-06 19:58

我来回答

1个回答

热心网友 时间:2022-04-18 03:56

Python中的元组是一种类似于列表的容器类型,但列表是可变的而元组不可变。
元组本身是不可变的,但是它所包含的元素的可变性取决于该元素的属性。

如:t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
元组t中的元素数字17和字符串‘Jesse’以及元组('LinuxKernel', 'Python')本身属于不可变元素,故其在元组中不可更新;但是其中包含的列表[17, 'Jesse']本身属于可变元素,故:

>>> t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
>>> t
(17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
>>> t[0] = 18
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
TypeError: 'tuple' object does not support item assignment
>>> t[3]
[17, 'Jesse']
>>> t[3][0] = 21
>>> t
(17, 'Jesse', ('LinuxKernel', 'Python'), [21, 'Jesse'])

由于元组的不可变性,所以它也没有列表的一些能改变自身的方法,如sort或reverse等(元组中的元素根据其本身属性可能有)。
列表的一些属性和方法:
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__rece__', '__rece_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

元组的一些属性和方法:
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__rece__', '__rece_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

通过比较两者的属性和方法,可以验证上一结论。

虽然列表与元组有些不同,但是它们还是有很多相似的地方:
1. 创建方法类似:
创建一个列表:l = [123, 'abc' , (1, 2, 3)]
创建一个元组:t = (123, 'abc', (1, 2, 3))

2. 都支持下标操作:
>>> l[1]
'abc'
>>> t[1]
'abc'

3. 都支持切片操作:
>>> l[0:-1]
[123, 'abc']
>>> t[0:-1]
(123, 'abc')

4. 支持重复操作:
>>> l * 2
[123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3)]
>>> t * 2
(123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3))

5. 支持连接操作(当然只能由同类型连接):
>>> l + [3, 7, 6]
[123, 'abc', (1, 2, 3), 3, 7, 6]
>>> t + (3, 7, 6)
(123, 'abc', (1, 2, 3), 3, 7, 6)

6. 还有拷贝,比较,成员关系操作等等
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 关于矮人的非法文件夹创建 谁能帮我解释一下这个不可变性? Linux中串口read怎样阻塞的方式读入数据 linux串口读写的问题 杜鲁门声明和三十八度线暴风雨是什么意思 我怀里38度什么意思 38度线划分含义 气温≡十八度是什么意思? 我梦到两个小男孩被困在湿的水泥里,然后请人帮忙抱出来? 梦见俩男孩给我抱来好长的木棒 楼下有路由器 楼上笔记本信号弱怎么办? 石斛有什么作用、能做哪些药膳? 路由器楼上信号不好怎么办 梦见两个小男孩争着要我抱下楼梯,有一个还哭了 中药玉竹,石斛,枸杞有治疗肾虚功效吗? ASP.NET将项目发布到服务器后 根据导入的Excel表里面的数据查询,报错:Microsoft Jet 数据库引擎打不开文 秋韵夜语的txt全集下载地址 姚安县徐银金太阳菌业种植基地怎么样? 她的初恋不是小事小说txt全集免费下载 安徽亿度电子商务有限公司怎么样? Linux中串口read怎样阻塞的方式读入数据解决办法 linux iz23zz8nve3z 是3.8内核吗 项目里报错了 芋头梗怎么做泡菜,大家交交 芋头,白萝卜,红萝卜,怎么淹泡菜 跪求《王国与城堡》官方简体中文免安装版游戏百度云资源 《王国与城堡》这款游戏,究竟好玩不好玩? 王国与城堡有没有手机版 王国与城堡新手开局注意事项 王国与城堡新手小技巧 王国与城堡怎么发展 王国与城堡发展方法技巧一览 王国与城堡储备仓库有什么作用 王国与城堡储备仓库作用介绍 王国与城堡 攻略烧坏的房子怎么办 王国与城堡维京人后期如何防御 王国与城堡防御技巧 三星手机怎样设置短信自动回复功能? 王国与城堡界面翻译汉化汇总 王国与城堡好不好玩 王国与城堡怎么把汉化bug转换英文 王国与城堡无法设定税收怎么办 王国纪元城堡外观有必要买吗 地下城堡2探索王城北部寻找线索国王怎么杀 王国联盟升级建筑没反应