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

谁能帮我解释一下这个不可变性?

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

我来回答

1个回答

热心网友 时间:2023-10-02 09:23

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
同龄人早发育好还是晚发育好 小孩晚熟正常吗? 女孩子身体发育的早晚跟童子身有关系吗? 自喷漆如何晾干 自喷漆一般几分钟能干 自动静电喷塑流水线 玫瑰茉莉薄荷茶有什么功效 平面磨床哪家的好 十大名牌平面磨床 手机病毒查杀软件推荐选择最好的手机病毒查杀软件 Linux中串口read怎样阻塞的方式读入数据 linux串口读写的问题 杜鲁门声明和三十八度线暴风雨是什么意思 我怀里38度什么意思 38度线划分含义 气温≡十八度是什么意思? 我梦到两个小男孩被困在湿的水泥里,然后请人帮忙抱出来? 梦见俩男孩给我抱来好长的木棒 楼下有路由器 楼上笔记本信号弱怎么办? 石斛有什么作用、能做哪些药膳? 路由器楼上信号不好怎么办 梦见两个小男孩争着要我抱下楼梯,有一个还哭了 中药玉竹,石斛,枸杞有治疗肾虚功效吗? ASP.NET将项目发布到服务器后 根据导入的Excel表里面的数据查询,报错:Microsoft Jet 数据库引擎打不开文 秋韵夜语的txt全集下载地址 姚安县徐银金太阳菌业种植基地怎么样? 她的初恋不是小事小说txt全集免费下载 安徽亿度电子商务有限公司怎么样? 陕西众之鑫工贸有限公司怎么样? 砀山亿度文化传媒有限公司怎么样? 关于矮人的非法文件夹创建 python不可变性和可变性的区别 Linux中串口read怎样阻塞的方式读入数据解决办法 linux iz23zz8nve3z 是3.8内核吗 项目里报错了 芋头梗怎么做泡菜,大家交交 芋头,白萝卜,红萝卜,怎么淹泡菜 跪求《王国与城堡》官方简体中文免安装版游戏百度云资源 《王国与城堡》这款游戏,究竟好玩不好玩? 王国与城堡有没有手机版 王国与城堡新手开局注意事项 王国与城堡新手小技巧 王国与城堡怎么发展 王国与城堡发展方法技巧一览 王国与城堡储备仓库有什么作用 王国与城堡储备仓库作用介绍 王国与城堡 攻略烧坏的房子怎么办 王国与城堡维京人后期如何防御 王国与城堡防御技巧 三星手机怎样设置短信自动回复功能? 王国与城堡界面翻译汉化汇总 王国与城堡好不好玩 王国与城堡怎么把汉化bug转换英文 王国与城堡无法设定税收怎么办 王国纪元城堡外观有必要买吗