Python零基础入门到高手8.4节: 元组与列表的区别

目录

[8.4.1 不可变数据类型](#8.4.1 不可变数据类型)

[8.4.2 可变数据类型](#8.4.2 可变数据类型)

[8.4.3 元组与列表的区别](#8.4.3 元组与列表的区别)

[8.4.4 今天彩票没中奖](#8.4.4 今天彩票没中奖)


8.4.1 不可变数据类型

不可变数据类型是指不可以对该数据类型进行原地修改,即只读的数据类型。迄今为止学过的不可变数据类型有字符串,元组。

在使用[]操作符对字符串,元组进行修改时,Python会抛出类型错误的异常信息,我们可以在交互模式中进行验证:

>>> content = "static data type"

>>> content[0]=S

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'S' is not defined

>>> numbers = (1,2,3,4,5)

>>> numbers[0] = 6

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

Python解释器抛出了TypeError的异常信息,TypeError表示类型错误的意思。之所以是类型错误,很好理解,因为字符串或元组这种类型不支持对元素进行修改。

8.4.2 可变数据类型

与不可变数据类型相对的是可变数据类型,在可变数据类型中,可以对容器中的元素进行修改。列表,以及在后面将要介绍的字典,集合等,都是可变的数据类型。我们同样可以在交互模式中进行验证:

>>> numbers = [1,2,3,4,5]

>>> id(numbers)

2749153235976

>>> numbers[0]=6

>>> numbers

6, 2, 3, 4, 5

>>> id(numbers)

2749153235976

从交互模式的输出中可以分析出,可以通过[]操作符列表类型进行修改。修改后的列表与修改前的列表,它们具有相同的id值,说明是同一个列表。

调用内置的id函数可以得到对象的id值,在CPython中,id值即内存地址。

8.4.3 元组与列表的区别

在使用元组的场景中,都可以使用列表来进行代替,那么为什么还要定义元组这种数据类型?在本小节的内容中,通过两个方面来进行分析:

(1) 元组是静态,不可变的数据类型

元组与列表的核心区别在于,元组是静态的,不可变的,列表是动态的, 可变的。我们在定义变量时,如果该对象具备静态,不可变的语义,应当使用元组,否则应当使用列表。以生活中的购物清单来进行举例,在购物清单中,我们可以随时对清单进行修改,比如添加某一个商品,或从购物车中移除某一个商品。购物清单是可修改的,可变的,现在通过Python代码来进行模拟:

python 复制代码
# __desc__ = 通过Python代码模拟购物清单的添加和删除
 
# 定义shopping_list,表示购物清单
shopping_list = ["消毒液", "口罩", "白酒"]
 
# 口罩已经断货,从购物车中移除
shopping_list.remove("口罩")
# shopping_list的输出为["消毒液", "白酒"]
 
# 从购物车中添加葵花口服液
shopping_list.append("葵花口服液")
# shopping_list的输出为["消毒液", "白酒", "葵花口服液"]

一周有七天,从周一到周日,不会再包含其它的时间单位,此时通过元组来定义一周的所有时间,在使用上非常自然:

python 复制代码
# __desc__ = 通过元组来表示一周
 
# 定义变量week,表示一周
week = ("周一", "周二", "周三","周四", "周五", "周六","周日")
 
我们同样可以通过列表来表示一周:
# __desc__ = 通过列表来表示一周
 
# 定义变量week,表示一周
week = ["周一", "周二", "周三","周四", "周五", "周六","周日"]

由于列表是可变的数据类型,所以可以在程序中随时对列表进行修改:

python 复制代码
# __desc__ = 粗心的程序员添加了个周八
# 定义变量week,表示一周
week = ["周一", "周二", "周三","周四", "周五", "周六","周日"]
week.append("周八")
# week的输出为["周一", "周二", "周三","周四", "周五", "周六","周日","周八"]

一周的时间里包含周八,这显然不符合日常逻辑。而使用元组,可以避免这样的问题, 一旦对元组进行修改,Python就会抛出类型错误的异常信息。

8.4.4 今天彩票没中奖

跟薯条老师学高级爬虫(JS逆向+安卓逆向),数据分析,大数据开发,金融量化交易,以及机器学习+深度学习算法。坚定自己的学习目标,保持学习的热情,那你成为高手只是时间问题。

薯条老师的学生在南方电网,林氏家居,京东,阿里等大厂。想系统学习Python和Java的同学,可以移步薯条老师的个人技术博客:薯条老师的个人技术博客http://www.chipscoco.com/ 对本节教程有任何不懂的同学,亦可在评论区中进行评论。薯条老师会详细解答你们提出的每一个问题。

相关推荐
THMAIL5 分钟前
量化基金从小白到大师 - 金融数据获取大全:从免费API到Tick级数据实战指南
人工智能·python·深度学习·算法·机器学习·金融·kafka
zzywxc7876 分钟前
AI在金融、医疗、教育、制造业等领域的落地案例(含代码、流程图、Prompt示例与图表)
人工智能·spring·机器学习·金融·数据挖掘·prompt·流程图
曼巴UE524 分钟前
UE5.3 C++ 接口初步使用
开发语言·jvm·c++
奔跑的石头_29 分钟前
GO语言的主要语法和特性
开发语言
代码欢乐豆43 分钟前
scikit-learn零基础配置(含python、anaconda)
python·机器学习·scikit-learn
liulilittle1 小时前
UNIX/macOS路由表查询原理与实现
服务器·开发语言·c++·macos·unix·编程语言
Java水解1 小时前
Python数据库操作:SQLAlchemy ORM指南
python
悠哉悠哉愿意1 小时前
【数学建模学习笔记】无监督聚类模型:分层聚类
笔记·python·学习·数学建模
HUST1 小时前
C语言 第三讲:分支和循环(上)
c语言·开发语言
Tiger Z1 小时前
《动手学深度学习v2》学习笔记 | 2.4 微积分 & 2.5 自动微分
pytorch·深度学习·ai