Python基础数据类型名称及定义速查
全面整理Python核心内置数据类型的官方名称、标准定义、字面量语法、可变性及判断转换方法,配有高清矢量图解与速查表格。
一、Python 基础数据类型分类全景
根据 Python 官方规范与数据组织形态,内置数据类型主要可以划分为数值类型(Numeric)、序列类型(Sequence)、键值映射(Mapping)、集合类型(Set)以及单一空值类型(NoneType)。每种类型在内存占用、是否允许原地修改(可变性)以及索引机制上各有不同。
核心内置类型快速速查表
| 类型名称 | 类型标识符 (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]。
1. 字符串 str
字符串是不可变序列,任何对字符串的修改方法(如 replace()、strip()、lower())都不会改变原始字符串,而是返回一个新的 str 实例。
2. 列表 list 与元组 tuple 的核心区别
- 列表 (
list):方括号包裹,是可变序列。支持append()、extend()、pop()等原地修改操作。由于需要应对频繁动态扩容,列表底层维护了容量缓冲。 - 元组 (
tuple):圆括号包裹(单元素写作(item,)),是不可变序列。元组一旦创建,其引用的对象指针列表即固化。元组内存开销更小,创建速度更快,适合作为函数的返回值及字典的只读复合键。
四、可变类型与不可变对象的底层机制
Python 中的“变量”本质上是指向内存对象的标签或引用(Reference)。理解可变(Mutable)与不可变(Immutable)对象的差异,是写出没有非预期副作用代码的关键。
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() 两个内置函数,但在用法与语义上存在严格差异。
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("无法将该字符串解析为合法整数")
七、常见混淆点速查总结
-
单元素元组的逗号声明:
圆括号
(42)在 Python 解析器中被视为普通的数学运算优先级括号,其类型为int;必须书写为(42,)才能被正确实例化为tuple。 -
==与is的区别:==比较的是两个对象的值是否相等(调用__eq__);is比较的是两个对象在内存中的物理地址(id(a) == id(b))。判断变量是否为None时,应始终使用if x is None:。 -
不可变容器中包含可变对象:
如果一个元组包含列表(如
t = (1, [2, 3])),元组本身的引用不可变(不能把列表替换成其他对象),但列表内部的元素仍然可以被原地增删修改。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













