1.存储模型

对类型的第一个方式,就是看看这种类型的对象能保存多少个对象。一个能保存单个字面对象的类型,我们称之为原子或标量存储;那些可容纳多个对象的类型,我们称之为容器存储。

以存储模型为标准的类型分类

存储模型


分类

Python类型

标量/原子类型

数值(所有的数值类型),字符串

容器类型

列表、元组、字典

2.更新模型

另一种对标准类型进行分类的方式就是:对象创建成功之后,它的值可以更新吗?。某些类型允许允许他们的值进行更新,而另一些则不允许。可变对象允许他们的值更新,而不可变对象则不允许他们的值被更改。

以更新模型以标准的类型分类

更新模型


分类

Python类型

可变类型

列表,字典

不可变类型

数字,字符串,元组

你可能会质疑?变量,字符串不是可以赋值吗,怎么是不可变的类型。事实是当你对数值变量或字符串变量重新赋值,一个新对象被创建,然后新对象取代了旧对象。例子更直观:

<span style="font-size:14px;"><span style="font-size:14px;">>>> x = 'Python'
>>> id(x)
139715438963088
>>> x = 'C'
>>> id(x)
139715439403736
>>> i = 0
>>> id(i)
28172656
>>> i = 1
>>> id(1)
28172632</span>
</span>


而列表可以被修改而无需替换原始对象

<span style="font-size:14px;"><span style="font-size:14px;">>>> aList = ['python' , 'c' , 'java']
>>> aList
['python', 'c', 'java']
>>> id(aList)
139715438725600
>>> aList[2] = 'c++'
>>> aList
['python', 'c', 'c++']
>>> id(aList)
139715438725600</span>
</span>


列表的值不管怎么变,列表的ID不变

3 访问模型

访问模型是区分数据类型的首要模型。访问模型分类也就是根据访问我们存储的数据的方式对数据类型进行分类。在访问模型中共有3种访问方式:直接存取、顺序和映射。

以访问模型为标准的类型分类

访问模型


分类

Python类型

直接访问

数字

顺序访问

字符串、列表、元组

映射访问

字典

为什么要对这些数据类型再三分类呢?

第一个问题,为什么要分类?因为Python提供了高级的数据结构,我们需要将那些原始的的类型和功能强大的扩展类型区分开来。另外,分类有助于搞清楚某种类型应该具有什么行为。第三,一个优秀的程序员应该知道所有类型的特性,以便于更好的使用。

第二个问题,为什么要用这么多种模型来分类?所有的数据类型有错综复杂的关系,我们希望揭示所有类型的共同之处,而且也希望揭示每种类型的独到之处。搞清所有类型之间的关系会对程序员的开发工作有极大的帮助。对每种类型的了解越多,程序员就要越能在自己的程序中使用合理的类型来达到最佳的效果。