首页
学习
活动
专区
工具
TVP
发布

Python“六君子”之Tuple

今天我和大家一起聊聊Python“六君子”之Tuple。说到Tuple(元祖),那可是List的孪生兄弟,在Python 3中,List是写在方括号[]之间,用逗号分隔开的有序元素序列,而Tuple是写在圆括号()之间,用逗号分隔开的有序元素序列。与列表不同是,元祖是不可变的,而列表是可变的。,多说无益,直接代码干(感谢我的好兄弟给我提了宝贵的建议,以后代码的编辑环境将使用IDLE)。

上图中定义了一个元祖t1,可以发现,tuple包含__add__、__contains__和__getitem__方法,却不包含__setitem__方法,这也说明了tuple是不可变的。OK,我们试一下。

t1[3]=888,我们试图对元祖元素赋值,结果Python提示TypeError,即类型错误:'tuple' object does not support item assignment,元祖类型不支持元素赋值。不过真的就不能“改变”元祖了吗?答案是否定的,先卖个关子,大家继续看后面的操作。

先看结果,不可变的t1被改变了,但真的如我们所看到的吗?下面开始分析,t1是不可变的元祖,在t1内包含一个列表['I','am','inside'],我们知道列表是可变的,我们首先通过id()函数获取列表的标识符,即内存地址45954512,然后试图通过赋值语句t1[4]=['I am coming']更改t1,结果自然是失败的。怎么办呢?既然t1[4]是列表,那就可以用List的方法嘛,于是我们先用clear方法清空列表,再用append方法对列表追加元素,如上图所示语句被成功执行。t1[4]的值变为['I am coming'],不过我们通过执行id()函数,发现t1[4]的标识符仍然是45954512,说明了元祖t1的第四个元素并没有发生改变,这样解释还不够直观,我们通过一张图来说明。

这又涉及到了一个知识点,值类型和引用类型。值类型本身不允许被修改,数值上的修改其实是让变量指向了一个新的对象;引用类型本身允许被修改。对象被创建时,系统在内存中开辟了一块空间(记为A),不可变类型直接把值写入这一空间,而可变类型在另外一个空间(记为B)被创建,并把其内存地址写入A空间。回到上述例子,t1[4]中存储的仅是其一个数值,该数值所对应的内存地址才存储着列表这个对象,比较拗口吧,换个例子,对于房屋租赁公司而言,档案柜中存储的是房屋所在的位置和钥匙,这个是不会变的;而房屋里面住的人是可以改变的。

,编程老司机们原谅一下我吧,要完全讲清上面的知识点,需要讲解堆和栈的概念以及变量在内存中的存储方式,这些对于初学者无疑是天书,所以笔者在这里先以简单的例子让初学者心中有个大致的印象,我们在后面的学习过程中再逐步深入。

小Tips:Tuple是不可变类型,所以它更安全,希望大家在以后的编程实践中能用Tuple的地方就不要用List。,Python“六君子”之Tuple就先探讨到这儿,苏苏赶紧要为大家准备编程小点心去了,稍后,敬请大家享用。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180603G05W7X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券