好,这一题是 Python 入门到进阶都绕不开的核心。
我会按 “是什么 → 怎么用 → 底层原理 → 易错点 → 面试/实战总结” 给你一篇真正把变量讲透的说明。
Python 变量详解
一、Python 中的变量是什么?
一句话定义:
Python 变量本质上是“对象的引用”,而不是装数据的盒子。
a = 10
含义是:
- 创建一个整数对象
10 - 变量
a指向(引用) 这个对象
二、变量的创建与赋值
1️⃣ 基本赋值
x = 5
name = "Alice"
📌 Python 不需要声明类型
2️⃣ 动态类型特性
a = 10
a = "hello"
- 合法
- 变量类型随对象改变
3️⃣ 多重赋值
a = b = c = 0
⚠️ 注意:都指向 同一个对象
4️⃣ 解包赋值(非常常用)
x, y = 1, 2
a, b = b, a # 交换变量
三、变量命名规则
合法规则
- 字母、数字、下划线
- 不能以数字开头
- 区分大小写
- 不能使用关键字
import keyword
keyword.kwlist
命名规范(PEP 8)
- 变量 / 函数:
snake_case - 常量:
UPPER_CASE
total_score = 90
MAX_SIZE = 100
四、变量与对象的关系(重点)
1️⃣ 查看对象身份
a = 10
b = a
id(a) == id(b) # True
👉 a 和 b 指向同一个对象
2️⃣ 可变对象 vs 不可变对象
不可变对象
intfloatstrtuple
a = 10
a += 1 # 新对象
可变对象
listdictset
lst = [1, 2]
lst.append(3) # 原对象修改
五、变量修改的本质差异(高频坑)
示例对比
a = 10
b = a
a += 1
a指向新对象11b仍指向10
lst1 = [1, 2]
lst2 = lst1
lst1.append(3)
lst1和lst2都变了
六、作用域(Scope)
1️⃣ LEGB 规则
查找顺序:
Local → Enclosing → Global → Built-in
2️⃣ global / nonlocal
x = 10
def func():
global x
x = 20
def outer():
x = 10
def inner():
nonlocal x
x = 20
七、变量删除
a = 10
del a
- 删除的是 引用
- 对象是否销毁由 GC 决定
八、浅拷贝 vs 深拷贝(变量相关)
import copy
copy.copy(obj) # 浅拷贝
copy.deepcopy(obj) # 深拷贝
📌 与“可变对象引用”强相关
九、常见误区总结(非常重要)
❌ 1. Python 变量是盒子
错,是引用
❌ 2. = 是拷贝
错,是绑定
❌ 3. 函数参数是引用传递
准确说法:对象引用传递(call by object reference)
十、面试一句话总结
Python 变量本质是对象引用,赋值只是绑定关系的改变,不可变对象会产生新对象,而可变对象在原地修改。
十一、速记口诀
名不存值,名指对象;
可变改自身,不可变换新家。
如果你愿意,我可以下一步直接带你:
- 🔥 Python 变量面试 10 连击
- 🔥 参数传递底层原理
- 🔥 可变对象陷阱合集
- 🔥 Python 内存管理 / GC
你是 Python 新手,还是 准备面试 / 写工程?