Skip to content

变量与作用域

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。函数内赋值默认创建局部变量;只有确实要修改外层绑定时使用 nonlocalglobal

py
def make_counter():
    count = 0

    def increment() -> int:
        nonlocal count
        count += 1
        return count

    return increment

模块级 UPPER_CASE 是常量约定,不会阻止重新赋值。跨模块共享的可变全局状态会增加测试和并发风险,优先通过参数、返回值或对象依赖传递状态。

基于 MIT 许可发布