类变量和实例变量的内存分配方式对性能的影响具体有哪些?

类变量和实例变量的内存分配方式对性能的影响具体有哪些?

类变量、实例变量内存分配方式带来的五大具体性能影响

一、内存占用性能

1. 类变量

类定义阶段在堆中只分配唯一一块内存,存放在类对象的__dict__里,所有实例仅保存对这块内存的引用地址,不会复制数据。

  • 优点:海量实例场景下内存高度复用,不会产生大量重复数据;内存占用低,CPU 高速缓存命中率更高,减少操作系统缺页中断、内存换页开销,避免 OOM。
  • 缺点:数据全局共享,一旦修改可变对象,所有实例同步生效。

2. 实例变量

每次实例化都会单独在堆中开辟内存,存入当前实例的__dict__,N 个实例就会分配 N 份独立内存。

  • 缺点:大量实例存储相同常量会造成严重内存冗余,堆内存占用飙升,缓存失效,程序响应变慢。

二、对象实例化(创建)性能

  1. 类变量实例创建时只需要分配实例基础对象头,不需要拷贝类变量,也不需要在__init__中重复执行赋值逻辑,批量创建大量对象速度更快。
  2. 实例变量每次实例化都要执行self.变量 = 值,往实例属性字典写入键值对,属于重复的运行时操作。实例数量越多,总耗时越高,百万级创建场景差距会被明显放大。

三、属性访问性能

类变量两种访问形式

  1. 类名.类变量:直接查询类的属性字典,一次哈希查找,访问速度最快;
  2. 实例.类变量:先检索实例__dict__未命中,再向上遍历类的属性字典,多一层查找链路,速度略慢于实例变量。

实例变量

直接读取当前实例自身的属性字典,仅一次哈希查询,访问速度稳定高效。

说明:常规业务下速度差距微乎其微,只有上亿次高频循环读取场景才会体现差异。

四、垃圾回收(GC)性能

类变量

生命周期绑定类对象,程序运行期间不会被回收,只需要维护一次引用计数。大量实例销毁时,不会频繁变更该变量的引用计数,GC 标记、扫描压力小,GC 停顿(STW)少,高并发服务延迟更稳定。

实例变量

依附单个实例存在,实例创建、销毁都会修改变量引用计数。高频创建销毁临时对象时,会频繁触发 Python 分代 GC,带来程序停顿、接口延迟抖动、系统吞吐量下降等性能问题。

五、可变对象下的并发性能

  1. 类变量为 list/dict 等可变容器所有实例指向同一个内存地址,修改容器内部数据无内存拷贝,读取性能高;但多线程并发修改会出现数据竞争,必须加互斥锁,锁竞争、线程上下文切换会大幅降低并发吞吐量,性能严重下降。

  2. 实例变量为可变容器每个实例拥有独立内存空间,数据天然隔离,无需加锁,没有并发竞争损耗,高并发场景性能更稳定,代价是内存开销更大。

额外隐性性能损耗(极易踩坑)

通过实例.类变量 = 新值并不是修改类变量,而是在当前实例内存中新建同名实例变量。 若大量实例都执行该赋值操作,原本全局复用的类变量会变成海量独立实例变量,直接导致:内存冗余、缓存命中率降低、GC 压力暴增,彻底丧失类变量的性能优势。

补充优化方案

海量实例使用实例变量时,可通过__slots__禁用实例动态属性、移除__dict__,最高可降低 50% 以上实例内存占用,缓解实例变量内存偏高的性能短板。

性能对比汇总表

表格

性能维度类变量实例变量
内存占用低,全局单份内存复用高,每个实例独立分配内存
实例化耗时快,无重复属性写入略慢,每次需要写入实例字典
属性读取速度类名访问最快;实例访问略慢单次哈希查找,访问稳定高效
GC 回收压力小,生命周期长,极少触发回收大,频繁创建销毁易引发 GC 停顿
并发性能(可变对象)需加锁,高并发下锁竞争损耗大数据隔离无锁,并发性能优异

需要我附带简易性能测试代码来量化三种场景的耗时与内存差异吗?

coolcl.cn
www.coolcl.cn
kd8s92.coolcl.cn
mpx73n.coolcl.cn
zr29gw.coolcl.cn
bt57jq.coolcl.cn
lp36vh.coolcl.cn
qf94dz.coolcl.cn
sg25xk.coolcl.cn
nw71rc.coolcl.cn
dj48pm.coolcl.cn
hv63bz.coolcl.cn
gc27ty.coolcl.cn
fs51lw.coolcl.cn
xb97qj.coolcl.cn
mr32dv.coolcl.cn
jt75sz.coolcl.cn
pn49gx.coolcl.cn
vw23kr.coolcl.cn
zh68mc.coolcl.cn
bs91py.coolcl.cn
lf37tz.coolcl.cn
qm52hg.coolcl.cn
sn78dx.coolcl.cn
nw26jk.coolcl.cn
dg43vr.coolcl.cn
hm95bz.coolcl.cn
kt31sy.coolcl.cn
bp67lw.coolcl.cn
zf24qj.coolcl.cn
xv59dm.coolcl.cn
nr72hz.coolcl.cn
dj38gx.coolcl.cn
fw62kr.coolcl.cn
sh94mc.coolcl.cn
bl27py.coolcl.cn
vq51tz.coolcl.cn
mj76hg.coolcl.cn
zs42dx.coolcl.cn
np98jk.coolcl.cn
lc33vr.coolcl.cn
qb65bz.coolcl.cn
sn21sy.coolcl.cn
dg77lw.coolcl.cn
hm44qj.coolcl.cn
kt92dm.coolcl.cn
bp28hz.coolcl.cn
zf53gx.coolcl.cn
xv79kr.coolcl.cn
nr34mc.coolcl.cn
dj61py.coolcl.cn
fw96tz.coolcl.cn
sh22hg.coolcl.cn
bl58dx.coolcl.cn
vq74jk.coolcl.cn
mj39vr.coolcl.cn
zs64bz.coolcl.cn
np91sy.coolcl.cn
lc26lw.coolcl.cn
qb52qj.coolcl.cn
sn78dm.coolcl.cn
dg35hz.coolcl.cn
hm69gx.coolcl.cn
kt23kr.coolcl.cn
bp57mc.coolcl.cn
zf72py.coolcl.cn
xv38tz.coolcl.cn
nr64hg.coolcl.cn
dj99dx.coolcl.cn
fw25jk.coolcl.cn
sh51vr.coolcl.cn
bl76bz.coolcl.cn
vq32sy.coolcl.cn
mj67lw.coolcl.cn
zs93qj.coolcl.cn
np29dm.coolcl.cn
lc54hz.coolcl.cn
qb79gx.coolcl.cn
sn35kr.coolcl.cn
dg61mc.coolcl.cn
hm97py.coolcl.cn
kt24tz.coolcl.cn
bp50hg.coolcl.cn
zf75dx.coolcl.cn
xv31jk.coolcl.cn
nr66vr.coolcl.cn
dj92bz.coolcl.cn
fw27sy.coolcl.cn
sh53lw.coolcl.cn
bl78qj.coolcl.cn
vq34dm.coolcl.cn
mj60hz.coolcl.cn
zs95gx.coolcl.cn
np21kr.coolcl.cn
lc56mc.coolcl.cn
qb72py.coolcl.cn
sn37tz.coolcl.cn
dg63hg.coolcl.cn
hm99dx.coolcl.cn
book.coolcl.cn/article/B2c3D4e5F6.html
bbs.coolcl.cn/article/A1b2C3d4E5.html
mp.coolcl.cn/article/A2b5C7d1E9.html
baike.coolcl.cn/article/A3b6C8d2E0.html
baike.coolcl.cn/blog/P8q1R3s7T5.html
m.coolcl.cn/blog/Q9r2S4t8U6.html
wap.coolcl.cn/blog/R0s3T5u9V7.html
book.coolcl.cn/article/D5f9G2h7J4.html
bbs.coolcl.cn/article/B7d2F5k1M8.html
mp.coolcl.cn/article/C3g6H9j2N5.html
baike.coolcl.cn/article/E2b8K5p3S7.html
baike.coolcl.cn/blog/A9s2D6f8G1.html
m.coolcl.cn/blog/F4h7J2n5P9.html
wap.coolcl.cn/blog/G1k6M3r8T2.html
book.coolcl.cn/blog/H5p9S2v7W4.html
bbs.coolcl.cn/blog/J7r2T5x1Z8.html
mp.coolcl.cn/article/K3v6W9b2C5.html
baike.coolcl.cn/article/L2b8D5f3G7.html
m.coolcl.cn/article/M9f2H6j8K1.html
wap.coolcl.cn/article/N4h7J2m5R9.html
book.coolcl.cn/article/P1m6R3s8T2.html
bbs.coolcl.cn/article/Q5s9T2v7X4.html
mp.coolcl.cn/article/R7v2X5z1B8.html
baike.coolcl.cn/article/S3z6B9c2D5.html
baike.coolcl.cn/blog/T2c8D5g3H7.html
m.coolcl.cn/blog/U9g2H6k8J1.html
wap.coolcl.cn/blog/V4k7J2p5M9.html
book.coolcl.cn/blog/W1p6M3r8S2.html
bbs.coolcl.cn/blog/X5r9S2t7V4.html
mp.coolcl.cn/blog/Y7t2V5w1Z8.html
baike.coolcl.cn/article/Z3w6B9d2F5.html
m.coolcl.cn/article/A2d8F5h3J7.html
wap.coolcl.cn/article/B9h2J6m8K1.html
book.coolcl.cn/article/C4m7K2p5R9.html
bbs.coolcl.cn/article/D1p6R3s8T2.html
mp.coolcl.cn/article/E5s9T2v7W4.html
baike.coolcl.cn/article/F7v2W5x1Y8.html
baike.coolcl.cn/blog/G3x6Y9z2B5.html
m.coolcl.cn/blog/H2z8B5c3D7.html
wap.coolcl.cn/blog/J9c2D6g8F1.html
book.coolcl.cn/blog/K4g7F2j5H9.html
bbs.coolcl.cn/blog/L1j6H3m8K2.html
mp.coolcl.cn/blog/M5m9K2p7R4.html
baike.coolcl.cn/article/N7p2R5s1T8.html
m.coolcl.cn/article/P3s6T9v2W5.html
wap.coolcl.cn/article/Q2v8W5x3Y7.html
book.coolcl.cn/article/R9x2Y6z8B1.html
bbs.coolcl.cn/article/S4z7B2c5D9.html
mp.coolcl.cn/article/T1c6D3g8F2.html
baike.coolcl.cn/article/U5g9F2j7H4.html
baike.coolcl.cn/blog/V7j2H5m1K8.html
m.coolcl.cn/blog/W3m6K9p2R5.html
wap.coolcl.cn/blog/X2p8R5s3T7.html
book.coolcl.cn/blog/Y9s2T6v8W1.html
bbs.coolcl.cn/blog/Z4v7W2x5Y9.html
mp.coolcl.cn/blog/A1x6Y3z8B2.html
baike.coolcl.cn/blog/B5z9B2c7D4.html
m.coolcl.cn/article/C7c2D5g1F8.html
wap.coolcl.cn/article/D3g6F9j2H5.html
book.coolcl.cn/article/E2j8H5m3K7.html
bbs.coolcl.cn/article/F9m2K6p8R1.html
mp.coolcl.cn/article/G4p7R2s5T9.html
baike.coolcl.cn/article/H1s6T3v8W2.html
baike.coolcl.cn/article/J5v9W2x7Y4.html
m.coolcl.cn/article/K7x2Y5z1B8.html
wap.coolcl.cn/article/L3z6B9c2D5.html
book.coolcl.cn/article/M2c8D5g3H7.html
bbs.coolcl.cn/article/N9g2H6k8J1.html
mp.coolcl.cn/article/P4k7J2p5M9.html
baike.coolcl.cn/article/Q1p6M3r8S2.html
m.coolcl.cn/article/R5r9S2t7V4.html
wap.coolcl.cn/article/S7t2V5w1Z8.html
book.coolcl.cn/article/T3w6B9d2F5.html
bbs.coolcl.cn/article/U2d8F5h3J7.html
mp.coolcl.cn/article/V9h2J6m8K1.html
baike.coolcl.cn/article/W4m7K2p5R9.html
baike.coolcl.cn/article/X1p6R3s8T2.html
m.coolcl.cn/article/Y5s9T2v7W4.html
wap.coolcl.cn/article/Z7v2W5x1Y8.html
book.coolcl.cn/article/A3x6Y9z2B5.html
bbs.coolcl.cn/article/B2z8B5c3D7.html
mp.coolcl.cn/article/C9c2D6g8F1.html
baike.coolcl.cn/article/D4g7F2j5H9.html
m.coolcl.cn/article/E1j6H3m8K2.html
wap.coolcl.cn/article/F5m9K2p7R4.html
book.coolcl.cn/article/G7p2R5s1T8.html
bbs.coolcl.cn/article/H3s6T9v2W5.html
mp.coolcl.cn/article/J2v8W5x3Y7.html
baike.coolcl.cn/article/K9x2Y6z8B1.html
baike.coolcl.cn/article/L4z7B2c5D9.html
m.coolcl.cn/article/M1c6D3g8F2.html
wap.coolcl.cn/article/N5g9F2j7H4.html
book.coolcl.cn/article/P7j2H5m1K8.html
bbs.coolcl.cn/article/Q3m6K9p2R5.html
mp.coolcl.cn/article/R2p8R5s3T7.html
baike.coolcl.cn/article/S9s2T6v8W1.html
m.coolcl.cn/article/T4v7W2x5Y9.html
wap.coolcl.cn/article/U1x6Y3z8B2.html