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/ 对本节教程有任何不懂的同学,亦可在评论区中进行评论。薯条老师会详细解答你们提出的每一个问题。

相关推荐
AI即插即用3 分钟前
即插即用涨点系列 (八):AMDNet 详解!AAAI 2025 SOTA,MLP 融合多尺度分解(MDM)与 AMS 的涨点新范式。
人工智能·pytorch·深度学习·目标检测·计算机视觉·transformer
是店小二呀7 分钟前
五分钟理解Rust的核心概念:所有权Rust
开发语言·后端·rust
她说人狗殊途9 分钟前
存储引擎MySQL
开发语言
自然数e15 分钟前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
Arva .18 分钟前
ConcurrentHashMap 的线程安全实现
java·开发语言
禾风wyh25 分钟前
(ICLR 2019)APPNP传播用 PageRank,不用神经网络!
人工智能·深度学习·神经网络
Dxy123931021629 分钟前
Python为什么要使用可迭代对象
开发语言·python
Keep_Trying_Go42 分钟前
论文STEERER人群计数,车辆计数以及农作物计数算法详解(pytorch)
人工智能·pytorch·python
gzu_0144 分钟前
基于昇腾 配置pytorch环境
人工智能·pytorch·python
任子菲阳1 小时前
学Java第四十五天——斗地主小游戏创作
java·开发语言·windows