赞
踩
这个系列教程建议对照着视频学习,以下仅为课件内容。
本节课程的视频和实例源码下载方式:点击->我的主页,查看个人简介。
我尽量坚持每日更新一节。
元组,也是一种序列结构,它和列表非常类似,但是它不能被改变。也就是说,我们不能对元组中的元素进行修改。元组的语法如下:
(item1, item2, item3, …)
由中括号将所有列表元素括起来,不同的元素之间通过逗号分隔。
元组的语法和列表是不是很像,唯一的差别就是它用的小括号,而列表用的中括号。其实不然,元组还有一些特殊的地方,比如下面两个元组的定义:
-
- # file: ./5/5_7.py
-
- # 元组的操作
- tuple_1 = (1, 2, 100, 'python')
- tuple_2 = 'hello', 'python', 100 # python中,未加括号的序列都默认是元组
- tuple_3 = (98,) # 只包含一个元素的元组,需要加上逗号,否则小括号会被认为是运算符
-
元组的操作和列表几乎是一样的,我们就不一一列出了,大家可以参考列表去练习。
下面我们主要通过实例来看看元组“不可改变”的特性。
- # 元组的元素不可改变
-
- tuple_4 = (1, 5, 10)
- # tuple_4[0] = 3 # 会抛出异常
上面代码运行时会抛出异常:
TypeError: 'tuple' object does not support item assignment
明确提示,元组对象不支持元素的改变。
但是,元组元素可以是可变数据类型,如下操作是合法的:
- # 元组的元素可以是可变数据类型
-
- tuple_5 = (100, 200, [300, 400])
- tuple_5[2][0] = 500
- print(tuple_5)
下图解释了这个过程:
我们所谓的元组不可改变,指的是元组本身不可改变。但如果它的元素指向的是一个可变类型,那么这个元素指向的对象是可以改变的。因为整个过程中,元组本身并没有发生改变。
再看下面这个例子:
- tuple_4 = (1, 5, 10)
-
- tuple_4 = (100, 99)
- print(tuple_4)
这个例子可以正常运行,并且输出我们预期的正确结果。这说明tuple_4可以被改变吗?还记得我们在前面讲变量的哪些实例吗,我们用同样的方法把tuple_4这个变量对应的内存地址打印出来,看看它究竟发生了什么变化?
- tuple_4 = (1, 5, 10)
-
- print(id(tuple_4))
- tuple_4 = (100, 99)
- print(tuple_4)
- print(id(tuple_4))
输出结果为:
2812724308608
(100, 99)
2812723061120
我们可以看到,tuple_4在重新赋值后,它对应的内存改变了。这个行为和数字、字符串是不是很像呢?没错,这一类数据类型我们称为“不可变数据类型”。
不可变数据类型对应的内存中的数据是不能被修改的,就像tuple_4一样,它重新被赋值后,实际上是被指向了一块新的内存。原来的那块内存中的数据依然没有改变。
后面我们拿一个小节来总结一下可变数据类型和不可变数据类型。
本节课程的视频和实例源码下载方式:点击->我的主页,查看个人简介。
我尽量坚持每日更新一节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。