变量是程序存放数据的"盒子",数据类型则决定了盒子里能装什么、能做什么运算。Python 是动态类型语言,写起来很自由,但自由不等于可以乱来——理解每种类型的特性,才能写出高效且不易出错的代码。本文系统梳理 Python 的核心数据类型与变量机制。

1. 变量:名字与值的绑定

在 Python 中,赋值语句 a = 1 的含义是"把名字 a 绑定到对象 1"。变量本身没有类型,类型属于对象,因此同一个变量可以先后指向不同类型:

name = "小林"        # str
age = 25            # int
height = 1.75       # float
is_student = True   # bool

print(type(name))   # <class 'str'>
print(type(age))    # <class 'int'>

type() 查看类型,用 id() 查看对象地址。注意多个变量可以指向同一个对象,这就是"绑定"而非"复制"。

2. 内置数据类型一览

类别类型示例特点
数值int / float42, 3.14不可变,可做数学运算
文本str"hello"不可变,字符序列
布尔boolTrue / False逻辑判断
序列list / tuple[1,2], (1,2)有序,list 可变
集合set{1, 2}无序、自动去重
映射dict{"k": "v"}键值对,查找快

3. 数字:int 与 float

整数与浮点数的运算规则略有不同,/ 永远返回浮点数,取整要用 //:

a, b = 10, 3
print(a / b)    # 3.3333333333333335
print(a // b)   # 3 整除
print(a % b)    # 1 取余
print(a ** b)   # 1000 乘方

# 浮点数精度:二进制无法精确表示 0.1
print(0.1 + 0.2)  # 0.30000000000000004

涉及金额等精确计算时,应使用 decimal.Decimal 而非 float,否则会踩精度坑。

4. 布尔值与 None

bool 只有 True / False 两个值,而 None 表示"什么都没有"。判断时注意:空字符串、空列表、0、None 在条件里都等价于 False:

def show(value):
    if value:
        print(f"{value!r} 为真")
    else:
        print(f"{value!r} 为假")

show(0)          # 0 为假
show("")         # '' 为假
show([])         # [] 为假
show(None)       # None 为假
show("Python")   # 'Python' 为真

5. 类型转换与判断

Python 不会偷偷帮你转换类型,字符串拼数字会直接报错。显式转换是日常操作:

s = "42"
n = int(s)          # 字符串 → 整数
f = float("3.14")   # 字符串 → 浮点数
print(str(n) + "!") # 整数 → 字符串

print(isinstance(n, int))   # True
print(isinstance(f, (int, float)))  # True 数字家族

6. 可变与不可变

💡 学习建议:动手用 type()id() 验证每个类型的行为,尤其要理解"可变对象传引用"——这是新手最容易踩的坑。