Python 中 类变量 vs 全局变量

发布时间:2026/10/5 10:27:41
Python 中 类变量 vs 全局变量 Python类变量 vs 全局变量一、定义 存放位置全局变量定义在函数、类外部属于模块对象保存在模块的__dict__。g_val 100 # 全局变量模块级别 def test(): print(g_val)类变量写在class内部、方法外面属于类对象保存在类的__dict__所有实例共享同一份。class Demo: cls_val 200 # 类变量类级别重点区分实例.xxx 值是创建实例变量不会修改类变量d Demo() d.cls_val 999 print(Demo.cls_val) # 依然是200类变量没变二、生命周期全局变量模块被导入时创建程序退出 / 模块卸载才销毁。整个模块生命周期内一直存在。类变量执行class定义语句、创建类对象的时候生成类对象没有任何引用被 GC 回收时销毁。三、作用域 访问全局变量模块内任意地方可读函数内部修改必须加global否则会新建局部变量g 1 def func(): global g g 1类变量访问方式类名.变量或者实例.变量实例没有同名属性时向上查找类变量在类的方法里修改类变量要用类名.变量或者self.__class__.变量class Demo: x 1 def add(self): Demo.x 1 # ✅ 修改类变量 # self.x 1 # ❗ 会生成实例变量不再访问类变量四、多线程核心✅只读场景两者都安全⚠️并发写场景全都线程不安全Python GIL 只保证单条字节码原子x 1是多条字节码会丢失更新都需要 Lock。区别全局变量模块全局共享所有函数 / 线程都能随意读写容易全局污染调试麻烦。类变量仅限本类共享。多个不同类的类变量天然隔离适合分组维护多组共享状态推荐把锁、共享变量一起封装在类里。五、查找速度简单结论局部变量 类变量 全局变量全局变量需要查模块字典查找链路更长最慢。类变量访问类.属性直接查类__dict__略快于全局。性能差距很小绝大多数业务可以忽略热点循环建议缓存到局部变量。六、对比总表表格项目全局变量类变量归属模块对象类对象存储模块__dict__类__dict__共享范围整个模块所有代码同一个类的所有实例 类本身修改陷阱函数内修改忘记global变成局部变量实例.属性xxx新增实例变量不改类变量生命周期模块导入创建程序结束销毁class 定义时创建类无引用 GC 回收多线程并发写不安全需要锁不安全需要锁隔离性差容易全局污染好可以用多个类隔离多组状态适用场景少量简单全局配置需要封装、分组共享状态七、使用建议尽量少用全局变量状态分散、难维护容易意外篡改。需要跨实例共享数据优先类变量搭配锁、方法封装内聚性更好。如果每个实例自己单独数据实例变量而不是类变量。热点循环读取把全局 / 类变量先赋值给局部变量提升速度。八、什么时候选谁✅ 全局变量程序常量、模块级别固定配置只读✅ 类变量实例之间需要共享计数器、共享连接池、mp.yklkk.top/blog/9kLm2QpX7a.htmlmp.yklkk.top/blog/Zx4Tn8Vr1B.htmlmp.yklkk.top/blog/Qw7Yh3Ns5D.htmlmp.yklkk.top/blog/Mc2Jv9Kp6E.htmlmp.yklkk.top/blog/Rt8Bn4Xz0F.htmlmp.yklkk.top/blog/Hg5Lp1Wq7G.htmlmp.yklkk.top/blog/Uv3Dm6Yr2H.htmlmp.yklkk.top/blog/Pa9Kc4Nt8J.htmlmp.yklkk.top/blog/Se2Qx7Vb5K.htmlmp.yklkk.top/blog/Fn6Wm1Zp3L.htmlmp.yklkk.top/blog/Yd4Hr9Cv2M.htmlmp.yklkk.top/blog/Jk7Tq3Bs8N.htmlmp.yklkk.top/blog/Ol1Pm5Xw6P.htmlmp.yklkk.top/blog/Bg8Nc2Vr4Q.htmlmp.yklkk.top/blog/Xm5Kt7Yd1R.htmlmp.yklkk.top/blog/Cv9Qp3Ln6S.htmlmp.yklkk.top/blog/Zr2Wm8Hx4T.htmlmp.yklkk.top/blog/Nk6Jd1Vp9U.htmlmp.yklkk.top/blog/Lq4Yt7Bc2V.htmlmp.yklkk.top/blog/Wp8Rm3Nx5W.htmlmp.yklkk.top/blog/Td1Kv6Qs9X.htmlmp.yklkk.top/blog/Hx5Pm2Zr7Y.htmlmp.yklkk.top/blog/Gc9Bn4Wt1Z.htmlmp.yklkk.top/blog/Vr3Lq8Jd6A.htmlmp.yklkk.top/blog/Mp7Yx2Kc5B.htmlmp.yklkk.top/blog/Ks4Wm9Nv3C.htmlmp.yklkk.top/blog/Qn1Rt6Bp8D.htmlmp.yklkk.top/blog/Dz5Jv2Xm7E.htmlmp.yklkk.top/blog/Sb9Lq4Hr1F.htmlmp.yklkk.top/blog/Yt3Pm8Kx6G.htmlmp.yklkk.top/blog/Rc7Wn1Vd4H.htmlmp.yklkk.top/blog/Bp2Qx9Lm5J.htmlmp.yklkk.top/blog/Nv6Tr3Yc8K.htmlmp.yklkk.top/blog/Lm1Jd7Wp2L.htmlmp.yklkk.top/blog/Xq5Kv9Bn4M.htmlmp.yklkk.top/blog/Ct8Rm2Hx7N.htmlmp.yklkk.top/blog/Zp3Yq6Ld1P.htmlmp.yklkk.top/blog/Gv9Wm4Nc5Q.htmlmp.yklkk.top/blog/Hk2Jx7Rt8R.htmlmp.yklkk.top/blog/Md6Pq1Bv3S.htmlmp.yklkk.top/blog/Tn8Lm5Wx2T.htmlmp.yklkk.top/blog/Qr4Yp9Kc7U.htmlmp.yklkk.top/blog/Vx1Jv6Nd3V.htmlmp.yklkk.top/blog/Kp7Wm2Ht9W.htmlmp.yklkk.top/blog/Bc5Rq8Lx4X.htmlmp.yklkk.top/blog/Nm9Yd3Pv1Y.htmlmp.yklkk.top/blog/Lt2Kx7Bc6Z.htmlmp.yklkk.top/blog/Xv8Qm4Nr5A.htmlmp.yklkk.top/blog/Cp1Jd9Wt3B.htmlmp.yklkk.top/blog/Zk6Lq2Yx8C.htmlmp.yklkk.top/blog/Gr3Pm7Vc1D.htmlmp.yklkk.top/blog/Hx9Bn5Kd4E.htmlmp.yklkk.top/blog/Mv2Tq8Lm6F.htmlmp.yklkk.top/blog/Tc7Yp1Rx3G.htmlmp.yklkk.top/blog/Qm4Jv9Wd5H.htmlmp.yklkk.top/blog/Vp8Km2Nx7J.htmlmp.yklkk.top/blog/Kd1Lq6Bt9K.htmlmp.yklkk.top/blog/Bx5Rm3Yc2L.htmlmp.yklkk.top/blog/Nq9Pv7Hd4M.htmlmp.yklkk.top/blog/Lm3Jx1Wt6N.htmlmp.yklkk.top/blog/Xc8Qm5Bv2P.htmlmp.yklkk.top/blog/Cv4Kd9Nr7Q.htmlmp.yklkk.top/blog/Zp1Yq6Lx3R.htmlmp.yklkk.top/blog/Gt7Wm2Vc9S.htmlmp.yklkk.top/blog/Hk5Jv8Rd1T.htmlmp.yklkk.top/blog/Mx9Pq3Bn6U.htmlmp.yklkk.top/blog/Tm2Ld7Wv4V.htmlmp.yklkk.top/blog/Qc6Yp1Kx8W.htmlmp.yklkk.top/blog/Vr3Jm9Nt5X.htmlmp.yklkk.top/blog/Kp8Qv4Bd2Y.htmlmp.yklkk.top/blog/Bm1Lx6Wc7Z.htmlmp.yklkk.top/blog/Nv5Rd9Yp3A.htmlmp.yklkk.top/blog/Lq2Km7Jx8B.htmlmp.yklkk.top/blog/Xt9Pm4Vc1C.htmlmp.yklkk.top/blog/Cd3Qv8Bn6D.htmlmp.yklkk.top/blog/Zx7Lp2Yr5E.htmlmp.yklkk.top/blog/Gm1Jd6Wv9F.htmlmp.yklkk.top/blog/Hv4Kq9Nx2G.htmlmp.yklkk.top/blog/Mp8Rm3Bc7H.htmlmp.yklkk.top/blog/Tq1Yv5Ld4J.htmlmp.yklkk.top/blog/Qx6Jm2Wt9K.htmlmp.yklkk.top/blog/Vc3Pq7Rn1L.htmlmp.yklkk.top/blog/Km9Ld4Bv6M.htmlmp.yklkk.top/blog/Bp2Xv8Yc3N.htmlmp.yklkk.top/blog/Nr5Qm1Jx7P.htmlmp.yklkk.top/blog/Lv8Kd3Wt2Q.htmlmp.yklkk.top/blog/Xm4Pq9Bc6R.htmlmp.yklkk.top/blog/Ct1Rv7Lx5S.htmlmp.yklkk.top/blog/Zp8Jm2Yd4T.htmlmp.yklkk.top/blog/Gq3Kv6Nx9U.htmlmp.yklkk.top/blog/Hm7Ld1Wc5V.htmlmp.yklkk.top/blog/Mv4Pq8Bt2W.htmlmp.yklkk.top/blog/Tr9Ym3Jx6X.htmlmp.yklkk.top/blog/Qc2Kv7Ld1Y.htmlmp.yklkk.top/blog/Vp6Rm4Nc8Z.htmlmp.yklkk.top/blog/Kx1Jd9Wv3A.htmlmp.yklkk.top/blog/Bm5Qq2Yt7B.htmlmp.yklkk.top/blog/Nc8Lm4Hx1C.htmlmp.yklkk.top/blog/Lv3Pq9Rd6D.htmlmp.yklkk.top/blog/Xt7Km2Bc5E.html共享配置并且希望封装在一起要不要我给你一段极简示例代码一次性演示全局变量、类变量、实例变量三者行为对比