人人都会AI编程

7.2 六大标准数据类型

更新时间:2026-07-12

Python 的内置数据模型可以概括为六大类,覆盖了日常开发中几乎所有的数据结构需求。理解它们的分类和特性,是写出高效、清晰 Python 代码的基础。

下面用一个表格快速总览,后面再逐一展开。

| 类型分类 | 具体类型 | 是否可变 | 典型示例 |
|--------------|----------------------|----------|------------------------------------|
| 数值类型 | intfloatcomplexbool | 不可变 | 423.141+2jTrue |
| 序列类型 | strlisttuple | 部分可变 | "hello"[1,2,3](1,2) |
| 映射类型 | dict | 可变 | {"name": "Alice", "age": 30} |
| 集合类型 | setfrozenset | 部分可变 | {1,2,3}frozenset({1,2}) |
| None 类型 | NoneType | 不可变 | None |

说明boolint 的子类,TrueFalse 在数值上等于 10,但为了表达逻辑状态,通常视为独立类型。


数值类型

  • int:任意精度的整数。不需要担心溢出,10**100 也能正确计算。
  • float:双精度浮点数,遵循 IEEE 754 标准。注意 0.1 + 0.2 并不精确等于 0.3,这是浮点数本身的特性,不是 Python 的 bug。
  • complex:复数类型,用 j 表示虚部,如 z = 3 + 5j
  • bool:只有 TrueFalse 两个值,常用作条件判断。任何对象都可以在布尔上下文中求值,空对象(0""[] 等)视为 False

常用操作

x = 10 // 3      # 整除 -> 3
y = 10 % 3       # 取模 -> 1
z = round(3.1415, 2)  # 四舍五入 -> 3.14

序列类型

序列是按顺序排列的一组元素,支持索引、切片和迭代。

  • str:不可变文本序列。使用单引号或双引号定义,f"..." 进行格式化。
  name = "World"
  msg = f"Hello {name}!"  # Hello World!
  
  • list:可变序列,用 [] 定义,支持增删改查。
  items = [1, 2, 3]
  items.append(4)       # [1,2,3,4]
  
  • tuple:不可变序列,用 () 定义。常用于保护数据不被意外修改,或作为字典的键。
  point = (10, 20)       # 坐标
  

序列通用操作

s = "hello"[1:4]        # 切片 -> "ell"
len([1,2,3])            # 长度 -> 3

映射类型:dict

字典存储键值对,键必须可哈希(通常是不可变类型),值任意。自 Python 3.7 起,字典保持插入顺序。

user = {"name": "Alice", "age": 30}
user["email"] = "alice@example.com"   # 新增
print(user["name"])                    # Alice

常用方法.get() 安全取值、.keys() / .values() / .items() 遍历键值对、.pop() 删除。


集合类型

  • set:可变集合,元素唯一且无序,自动去重。支持交、并、差等数学运算。
  a = {1, 2, 2, 3}      # 实际为 {1,2,3}
  b = {3, 4}
  print(a & b)           # 交集 {3}
  
  • frozenset:不可变集合,可哈希,因此可作为字典的键或放进另一个集合中。

None 类型

NoneNoneType 的唯一值,表示“没有值”或“空”。常用于:

  • 函数没有显式返回值时,默认返回 None
  • 变量初始化为“尚未赋值”的占位符。
  • 条件判断中作为假值的一种。
def do_nothing():
    pass
result = do_nothing()
print(result is None)   # True

为什么区分可变与不可变?

这个主题会在下一节(7.3)深入探讨,但这里先点出一个关键现象:

  • 可变对象(如 listdictset)可以在原地修改内容,多个变量引用同一个对象时互相影响。
  • 不可变对象(如 intstrtuple)一旦创建就不能改变,任何“修改”操作都会产生新对象。

这个区别直接影响函数传参、拷贝行为和哈希特性,是 Python 中最重要的基础概念之一。