主题
变量与作用域
Python 变量是名称绑定,不是固定类型的容器。赋值将名称绑定到对象;重新赋值只是让名称指向另一个对象。
py
count = 1
count = "one" # 合法,但业务代码应保持语义稳定
tags = ["python"]
alias = tags
alias.append("typing")
assert tags == ["python", "typing"]可变对象经由任一引用修改都会反映到同一对象。需要副本时按类型选择 list(items)、items.copy() 或 copy.deepcopy();后者只在确有嵌套可变对象时使用。
作用域
名称查找遵循 LEGB:Local、Enclosing、Global、Builtins。函数内赋值默认创建局部变量;只有确实要修改外层绑定时使用 nonlocal 或 global。
py
def make_counter():
count = 0
def increment() -> int:
nonlocal count
count += 1
return count
return increment模块级 UPPER_CASE 是常量约定,不会阻止重新赋值。跨模块共享的可变全局状态会增加测试和并发风险,优先通过参数、返回值或对象依赖传递状态。
