Python中真的是能使用元组的地方尽量不使用列表吗?

推荐图书:

《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科课程“Python应用开发”配套教材,清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书)

图片

京东购买链接:https://item.jd.com/12668739.html

图片

天猫、当当均有销售,可以选择自己常用平台搜索“董付国 第3版”找到本书。

配套资源:教学大纲、电子教案、微课视频、PPT课件、例题源码、习题答案、考试系统。

适用专业:计算机、网络工程、软件工程以及相关专业。

适用学时:>=64

页数:381

定价:59.8

微课视频:77个

教学大纲:《Python程序设计(第3版)》配套教学大纲

习题答案:《Python程序设计(第3版)》课后习题答案

在Python语言中,元组是不可变的(或者说可哈希),列表是可变的(或者说不可哈希),很多资料上有“元组的效率比列表高,能使用元组的地方不要使用列表”这样的说法,这个说法对于Python 2.x低版本是成立的,那么是否适用于Python 3.x呢?很多人延续了Python 2.x对元组和列表的描述和认识,是否还准确呢?

下面的代码运行版本为Python 3.8.9,运行环境为IDLE。

1)元组占用的内存空间略小

图片

元组创建之后不允许改变元素的数量和引用,而列表在增加元素和删除元素时,会动态扩展和缩小所占内存空间,这确实会带来额外的开销。

图片

 

图片

2)元组对象的引用次数减少为0时,对应的内存空间不会立即释放,而是会进行缓存,元组被删除之后对应的内存空间会被保留一段时间,再次创建同样大小的元组时会尽量使用已缓存的内存空间,这可以在一定程序上避免反复申请和释放内存带来的时间开销。

图片

 

3)元组是不可变的,可以作为集合的元素和字典的“键”,不支持列表对象所具有的append()、clear()、extend()、insert()、pop()、remove()、reverse()、sort()等对自身进行修改的方法,也不支持关键字del删除元组中的元素。任何试图修改元素个数或元素引用的操作都会引发异常,作为参数传递给第三方开发的函数时元组更加安全,不会在被调函数中有意或无意地修改导致主调函数中的实参被修改。

图片

 

4)速度问题。很多资料上都会说元组比列表快,因为元组的内部实现更简单一些,那么实际情况是怎样的呢?

图片

 

在进行解包操作时,元组比列表略快,但是有限到几乎可以忽略。

图片

 

再来看一下使用for循环遍历元组和列表时的速度,元组略快,但也没有明显的优势。

图片

 

最后附上32位Python 2.7.11环境中元组与列表性能比较的结果,元组除占用内存空间略小之外,其他操作也并没有表现出很大的优势。

图片

 

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(累计印刷超过120次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”或“培训”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过500节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习1363道客观题和260道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值