厘清 Python 的序列类型
本文内容还是来自《流畅的 Python》这本书,当我读到 tuple 是不可变序列的时候,突然意识到我先前的理解都是错的啊!
可变序列和不可变序列
在我先前的理解中,几乎就是把 tuple
和 list
一样的在使用,当然他们的确有很多的共同点,但唯一的区别是,tuple 的元素一旦确定就不可以改变了。下面让我们来和「可变序列 list」对比一下。
1 | # tuple |
上文中,我们想对序列的第一个元素进行修改,tuple 会直接告诉你不可以这样做(即没有元素的 set 方法),而 list 可以。
在是否可变的理解上有一个误区,就是把「变量的可变」误以为是「tuple 可变」,这也正是我误解的地方。
1 | tuple_data = (1, 2, 3) |
所以不可变序列的不可变是指序列中的元素不可变!像这样的数据类型还有 str
和 bytes
。
扁平序列和容器序列
下面我们要说另外一种序列的划分方法,根据序列中存放的元素类型进行划分,不过它们的概念就相对比较简单,我来举个例子吧。
一般家里都会囤一些鸡蛋,以补充日常所需蛋白质,比如可以做番茄炒蛋,肉末蒸蛋、蛋炒饭等。你有没有发现存放鸡蛋的盒子,它非常特殊,刚刚能把鸡蛋固定住,由于表面不平整且容积较小,一般放不了别的东西。这个就是我们的「扁平序列」啦~它只能存放一种特定的数据类型,比如 str
、bytes
等。
其次,家里还会有一些大碗,它的容积很大,既可以用来盛米饭,或者盛红烧肉,而且还能盛半碗红烧肉和半碗米饭,非常好用!这种可以放入不同类型的容器,就是「容器序列」,比如有 list
、tuple
等。
我们来看下具体的代码:
1 | # str |
总结
下面是一些常见序列类型的分类,看来 list
还是最好用的万金油啊~