Python中的对象之间有联系也有区分,如字符串和列表都可以执行切片、索引等操作,说明字符串和列表之间是有关系的,那么理清这些关系有助于我们更好的理解python。
我们知道,字符串是不可变类型(immutable)的序列(sequences):字符串不能够在内存中直接改变(例如:>>> 'python'[0] = m
这个操作并不能够改变python这个字符串对象,不可变性是不可变类型的属性);字符串是有序的按位置排列的集合体(collections),可以通过偏移量访问其中的不同部分(序列类型的属性)。相同的类型之间有共同的属性,他们可以执行一些相同的操作,就像字符串和列表一样。
分类图:
类型
数字:(整数、浮点数、decimal、分数等)
支持加减等操作
序列:(字符串、列表和元组)
支持索引、切片、连接等
映射mappings:(字典)
支持通过键值索引等
值得注意的是,集合(sets)即不是序列,它是无序的;也不是映射,它不支持键值索引,它自成一类(a category unto themselves)。
可变性(Mutable?)
可变类型(Mutable)和不可变类型(Immutable)在Python是一个十分重要的概念。如果一个对象是不可变类型,那么就不能够直接改变他的值(可以通过赋值覆盖,等于创建了一个新的对象),否则会抛出错误,就像这样:
>>> 'python'[0] = 'm'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
这两类的具体划分:
不可变类型:(数字、字符串、元组和forzensets)
该类型的对象都不支持直接改变内容或本身(cannot in-place change)。如果需要的话我们可以通过创建一个新对象覆盖原来的对象来实现。
可变类型:(列表、字典、集合和bytearray)
相反的,该类型的对象可以通过操作直接改变,而不需要创建一个新对象,尽管这类对象也支持复制,但可变类型的对象可以直接修改。