Python基础数据类型名称及定义速查

方予
方予
发布时间:2026-11-15 | 4人浏览过
原创

全面整理Python核心内置数据类型的官方名称、标准定义、字面量语法、可变性及判断转换方法,配有高清矢量图解与速查表格。

在 Python 中,所有数据都以对象的形式存储与传递,每个对象都有其对应的内置类型(Type)。准确掌握内置类型的标准名称、构造语法、可变性以及内存行为,是避免隐式类型错误、写出规范高效代码的前提。本文将系统梳理 Python 的常用基础数据类型,提供清晰的定义与快速查阅参考。

一、Python 基础数据类型分类全景

根据 Python 官方规范与数据组织形态,内置数据类型主要可以划分为数值类型(Numeric)、序列类型(Sequence)、键值映射(Mapping)、集合类型(Set)以及单一空值类型(NoneType)。每种类型在内存占用、是否允许原地修改(可变性)以及索引机制上各有不同。

Python基础数据类型名称及定义速查
图 1:Python 基础数据类型分类全景图

核心内置类型快速速查表

类型名称 类型标识符 (type) 可变性 典型字面量书写 定义与核心特征
整数 (Integer) int 不可变 0, 42, -10, 0xFF 表示任意大小的整数,无溢出上限(仅受系统内存限制)。
浮点数 (Float) float 不可变 3.14, -0.5, 2e3 双精度 64 位浮点数(IEEE 754 标准),存在浮点精度特性。
复数 (Complex) complex 不可变 3+4j, 2.0j 包含实部与虚部,虚部以字母 j 或 J 结尾。
布尔值 (Boolean) bool 不可变 True, False 逻辑真假值,是 int 的直接子类(True=1, False=0)。
字符串 (String) str 不可变 'abc', "py", """text""" 有序 Unicode 字符序列,支持负索引与切片操作。
列表 (List) list 可变 [], [1, "a", True] 有序、元素类型可混杂的容器,支持原地增删改元素。
元组 (Tuple) tuple 不可变 (), (1,), (1, 2) 有序不可变的只读容器,单元素元组必须包含尾部逗号。
范围 (Range) range 不可变 range(10), range(1, 10, 2) 不可变的整数等差数列生成器,惰性计算,内存开销极小。
字典 (Dictionary) dict 可变 {}, {"k": "v", 1: 10} 键值对映射表,键必须为可哈希对象,自 Python 3.7 起严格保持插入顺序。
集合 (Set) set 可变 {1, 2, 3}, set() 无序、元素唯一的容器,空集合必须用 set() 构造。
不可变集合 frozenset 不可变 frozenset([1, 2]) 集合的冻结只读版本,因不可变故本身可哈希,可用作字典键。
空值 (NoneType) NoneType 不可变 None 单一常数对象,用于表示函数未返回值、空引用或默认占位。

二、数值类型与布尔值细解

Python 将所有数值形式抽象为对象。对于常见的算术运算与逻辑判断,以下规则是最核心的基础:

1. 整数 int 与浮点数 float

在 Python 3 中,传统的 int 与 long 已经合并为统一的 int,支持自动扩展的大数运算,不存在 C 语言中的 32 位或 64 位整型溢出问题。浮点数 float 则对应底层的 C double 类型:

# 整数的大数运算示例(自动扩展精度)
big_int = 2 ** 100
print(big_int)  # 1267650600228229401496703205376

# 浮点数科学计数法与精度特性
f1 = 1.25e-2    # 0.0125
print(0.1 + 0.2 == 0.3)  # 输出 False(浮点数二进制近似导致)

2. 布尔类型 bool 的继承特性

bool 是 int 的直接子类。True 的数值为 1,False 的数值为 0。在需要布尔判断的上下文中,以下值会被视为“假值(Falsy)”:0、0.0、None、False、空字符串 ""、空列表 []、空元组 ()、空字典 {}、空集合 set() 以及空 range(0)。其余对象默认均判定为“真值(Truthy)”。

三、序列类型(Sequence Types)与容器结构

序列类型的共同特征是:内部元素按照严格的线性次序排列,每个元素均可通过基于 0 的非负索引或基于 -1 的负索引直接访问,并支持切片语法 [start:stop:step]。

Python基础数据类型名称及定义速查
图 2:Python 序列类型的双向索引与切片模型

1. 字符串 str

字符串是不可变序列,任何对字符串的修改方法(如 replace()、strip()、lower())都不会改变原始字符串,而是返回一个新的 str 实例。

2. 列表 list 与元组 tuple 的核心区别

  • 列表 (list):方括号包裹,是可变序列。支持 append()、extend()、pop() 等原地修改操作。由于需要应对频繁动态扩容,列表底层维护了容量缓冲。
  • 元组 (tuple):圆括号包裹(单元素写作 (item,)),是不可变序列。元组一旦创建,其引用的对象指针列表即固化。元组内存开销更小,创建速度更快,适合作为函数的返回值及字典的只读复合键。

四、可变类型与不可变对象的底层机制

Python 中的“变量”本质上是指向内存对象的标签或引用(Reference)。理解可变(Mutable)与不可变(Immutable)对象的差异,是写出没有非预期副作用代码的关键。

Python基础数据类型名称及定义速查
图 3:不可变对象与可变对象在修改操作中的内存引用行为对比
注意事项: 由于可变对象在原地修改时不会更改对象本身地址,如果将可变对象用作函数默认形参(例如 def append_item(x, target=[])),该默认列表会在多次函数调用间共享并累积修改。规范做法是使用不可变的 None 作为默认值。

五、映射与集合类型(Mapping & Set)

1. 字典 dict

字典是以键值对形式存储的数据结构。字典的键(Key)必须是可哈希对象(Hashable),即对象在其生命周期内哈希值保持恒定并实现了 __hash__() 与 __eq__() 方法。基础不可变类型(int、float、str、tuple、frozenset)均可作为键,而可变类型(list、dict、set)无法作为键。

2. 集合 set 与 frozenset

集合专门用于存储无序、不重复的元素,其底层同样基于哈希表,因此元素查找与去重的时间复杂度为 \(O(1)\)。

  • set 支持原地的 add()、remove()、discard() 等操作,属于可变对象。
  • frozenset 是冻结版本的集合,一旦声明后不可增删元素。由于不可变,frozenset 自身是可哈希的,可以作为字典的键或放入其他集合中。

六、类型判断与类型转换操作流程

在实际开发中,需要经常对传入对象的类型进行校验或安全转换。Python 提供了 type() 与 isinstance() 两个内置函数,但在用法与语义上存在严格差异。

Python基础数据类型名称及定义速查
图 4:Python 类型判断与安全转换的标准判定步骤

1. isinstance() 与 type() 的适用边界

# 示例 1: isinstance 会考虑继承关系
print(isinstance(True, int))  # True,因为 bool 是 int 的子类
print(type(True) is int)      # False,type 严格对比具体类对象

# 示例 2: 推荐使用 isinstance 进行多类型联合校验
def process_number(n):
    if not isinstance(n, (int, float)):
        raise TypeError(f"期望数值类型,收到: {type(n).__name__}")
    return n * 2

2. 类型安全转换与异常捕获

Python 不允许无意义的隐式强制类型转换(例如字符串与整数不能直接相加:"age: " + 18 会直接抛出 TypeError)。显式转换必须调用对应类型的类构造器,并在必要时捕获 ValueError:

raw_input_str = "1024"
try:
    num = int(raw_input_str)
    print("转换成功:", num)
except ValueError:
    print("无法将该字符串解析为合法整数")

七、常见混淆点速查总结

  1. 单元素元组的逗号声明: 圆括号 (42) 在 Python 解析器中被视为普通的数学运算优先级括号,其类型为 int;必须书写为 (42,) 才能被正确实例化为 tuple。
  2. == 与 is 的区别: == 比较的是两个对象的值是否相等(调用 __eq__);is 比较的是两个对象在内存中的物理地址(id(a) == id(b))。判断变量是否为 None 时,应始终使用 if x is None:。
  3. 不可变容器中包含可变对象: 如果一个元组包含列表(如 t = (1, [2, 3])),元组本身的引用不可变(不能把列表替换成其他对象),但列表内部的元素仍然可以被原地增删修改。
相关专题:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表