一、内置数据类型
在 Python 中,数据类型可以分为不可变(immutable)和可变(mutable)两类。这个区别非常重要,因为它影响了数据如何在程序中被处理和修改。
不可变类型(Immutable)
不可变类型创建后其内容不能被改变。这包括:
- 整数(Integers)
- 浮点数(Floats)
- 复数(Complex Numbers)
- 布尔值(Booleans)
- 字符串(Strings)
- 元组(Tuples)
- 冻结集合(Frozensets)
当这些类型的对象被创建后,它们所存储的值就不能被修改。任何对它们的修改实际上都会创建一个新的对象。
可变类型(Mutable)
可变类型的对象创建后其内容可以被改变。这包括:
- 列表(Lists)
- 字典(Dictionaries)
- 集合(Sets)
- 字节数组(Byte Arrays)
这些类型的对象可以在它们被创建后修改,比如添加、删除或更改其内部的元素。
理解哪些数据类型是可变的,哪些是不可变的,对于编写有效和可预测的 Python 代码非常重要。不可变类型有助于确保数据的一致性和程序的可靠性,而可变类型则提供了更大的灵活性和动态性。
二、扩展包数据类型
在 Python 中,除了内置的可变和不可变类型,还有许多常用的扩展包提供了自己的数据类型,这些类型可以是可变的或不可变的。以下是一些常见的扩展包和它们提供的数据类型:
-
NumPy:
- 可变类型:
numpy.ndarray
是 NumPy 的核心数组类型,它是可变的。你可以更改数组中的元素、调整数组形状等。 - 不可变类型:NumPy 没有专门的不可变数组类型,但数组的某些操作(如
reshape
)会返回原数组的视图而不是一个完全独立的副本。
- 可变类型:
-
Pandas:
- 可变类型:
DataFrame
和Series
是 Pandas 中的两个主要数据类型,它们都是可变的。可以更改其中的数据、添加或删除列(对于DataFrame
)、添加或删除行等。
- 可变类型:
-
Collections(Python 标准库的一部分):
- 可变类型:
collections.deque
,collections.defaultdict
,collections.Counter
等。 - 不可变类型:
collections.namedtuple
创建的是不可变对象。
- 可变类型:
-
Immutable.js(在 Python JavaScript 环境中使用):
- 不可变类型:这个库提供了多种不可变数据结构,如
List
,Stack
,Map
等。
- 不可变类型:这个库提供了多种不可变数据结构,如
-
其他第三方库:
- 根据具体库的设计,可能会提供自定义的可变或不可变类型。例如,图形处理库可能会有自定义的可变图形对象类型,科学计算库可能会有特殊的数组或矩阵类型。
这些第三方库扩展了 Python 的数据类型系统,为不同的应用领域提供了专门的工具和结构。在使用这些库时,了解它们提供的数据类型及其可变性特点是非常重要的,这有助于更高效和安全地处理数据。