Python变量是对象的引用,无独立生命周期;对象生命周期由引用计数和垃圾回收管理;变量动态创建、作用域遵循LEGB原则;del删除绑定而非对象;循环引用需gc模块清理。

Python变量没有独立的“生命周期”概念,它只是对象的引用。变量本身不存储值,只指向内存中的对象;真正有生命周期的是对象——由引用计数和垃圾回收机制共同管理。
变量创建:赋值即存在
变量在首次赋值时动态创建,无需声明类型或提前定义:
- a = 10 —— 创建变量 a,指向整数对象 10
- b = [1, 2, 3] —— 创建变量 b,指向新生成的列表对象
- 函数参数、for循环变量(如 for i in range(3):)也属于运行时动态创建
变量作用域决定可访问范围
变量能否被读取或修改,取决于其定义位置和作用域规则(LEGB原则):
- 局部变量:在函数内部赋值,仅在该函数内有效;函数返回后,变量名消失(但对象可能仍存活)
- 全局变量:模块顶层赋值,整个模块可见;用 global 可在函数内修改
- 嵌套作用域:闭包中外部函数的变量,可被内层函数引用(nonlocal 支持修改)
- 注意:del x 删除的是变量名绑定,不是对象本身
对象销毁:引用计数归零触发释放
Python主要靠引用计数管理内存。当一个对象的引用计数降为0,它立即被销毁(调用 __del__,释放内存):
立即学习“Python免费学习笔记(深入)”;
- 变量重新赋值(x = 10 → x = "hello"),原对象少一个引用
- 变量被 del 或离开作用域(如函数结束),引用解除
- 容器对象(如列表)被清空或删除,其中元素引用数相应减少
- 循环引用时引用计数不为0,需依赖周期性垃圾回收器(gc 模块)清理
常见误区与调试建议
理解“变量即标签”,能避免典型困惑:
- 修改可变对象(如 list.append())不改变变量绑定,只改变所指对象内容
- 多个变量指向同一对象(a = b = []),修改任一都会影响另一个
- 用 id(x) 查看对象内存地址,用 sys.getrefcount(x) 查当前引用数(注意该函数调用本身会+1)
- 避免依赖 __del__ 做关键资源清理,优先使用 with 语句或显式 close()










