说起Python的基本数据类型,第一时间想到肯定是int、str、list、dict...
因为这几种数据类型被使用的频率相对比较高,所以对他们的印象会更深刻点。
但是在Python的基本数据类型里有有一个神奇的类型,他的功能(方法)和列表重叠,而且列表的功能(方法)要比他多得多。
一般人在使用Array的时候,基本上都会选择列表(List)而不会去选择他。
「他就是今天的主角--元组(Tuple)」
List VS Tuple
List和Tuple都是Python的内置类型,都可以保存数据集合,都可以保存复合数据,都可以用index方法对其进行索引。
为什么列表(List)会被经常使用?
就是因为列表的对象方法多,能增、能减、能查、能数、能切、能排、甚至能用+号对其进行相加...

使用dir(list)也可看到他自带的方法:
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
相比List,Tuple能使用的方法就少得可怜,只有区区四个。

使用dir(tuple)查看元组类型的内置方法:
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
从上方dir(tuple)打印出的列表中我们发现,他内置函数只能实现查(index)和数(count)的功能。
「既然列表包含所有的元组的功能,那元组还有什么必要存在?」
元组之所以区别于列表的最大原因是:「列表是可变对象而元组是不可变对象。」
简单来说,列表是可读可写的文档,那么元组就是一个只读的文档。
代码示例:
- >>> lst = ['maishu','jason']
- >>> print(id(lst))
- 4498791232
- >>> lst[1] = "kevin"
- >>> print(id(lst))
- 4498791232
❝
对列表进行修改之后,他在内存中的地址并不会被改变。
❞
- >>> tup = ("maishu","jason")
- >>> print(id(tup))
- 4498746176
- >>> tup[1] = "kevin"
- Traceback (most recent call last):
- File "
" , line 1, in <module> - TypeError: 'tuple' object does not support item assignment
报错了。
那我直接把元组tup定义成("maishu","kevin")呢?
- >>> tup = ("maishu","kevin")
- >>> print(id(tup))
- 4498746240
我们发现tup的id已经发生改变了,事实就是每一次创建元组对象,都会分配到新的内存地址。
在相同元素组成下,列表会更占内存空间:
- >>> import sys
- >>> sys.getsizeof(lst)
- 72
- >>> sys.getsizeof(tup)
- 56
- >>> a1 = ["a"]
- >>> a2 = ("a",)
- >>> {a1:"value"}
- Traceback (most recent call last):
- File "
" , line 1, in <module> - TypeError: unhashable type: 'list'
- >>> {a2:"value"}
- {('a',): 'value'}
- >>>
【python学习】
学Python的伙伴,欢迎加入新的交流【君羊】:757753272
一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料