类变量和实例变量的内存分配方式对性能的影响具体有哪些?
类变量、实例变量内存分配方式带来的五大具体性能影响
一、内存占用性能
1. 类变量
类定义阶段在堆中只分配唯一一块内存,存放在类对象的__dict__里,所有实例仅保存对这块内存的引用地址,不会复制数据。
- 优点:海量实例场景下内存高度复用,不会产生大量重复数据;内存占用低,CPU 高速缓存命中率更高,减少操作系统缺页中断、内存换页开销,避免 OOM。
- 缺点:数据全局共享,一旦修改可变对象,所有实例同步生效。
2. 实例变量
每次实例化都会单独在堆中开辟内存,存入当前实例的__dict__,N 个实例就会分配 N 份独立内存。
- 缺点:大量实例存储相同常量会造成严重内存冗余,堆内存占用飙升,缓存失效,程序响应变慢。
二、对象实例化(创建)性能
- 类变量实例创建时只需要分配实例基础对象头,不需要拷贝类变量,也不需要在
__init__中重复执行赋值逻辑,批量创建大量对象速度更快。 - 实例变量每次实例化都要执行
self.变量 = 值,往实例属性字典写入键值对,属于重复的运行时操作。实例数量越多,总耗时越高,百万级创建场景差距会被明显放大。
三、属性访问性能
类变量两种访问形式
类名.类变量:直接查询类的属性字典,一次哈希查找,访问速度最快;实例.类变量:先检索实例__dict__未命中,再向上遍历类的属性字典,多一层查找链路,速度略慢于实例变量。
实例变量
直接读取当前实例自身的属性字典,仅一次哈希查询,访问速度稳定高效。
说明:常规业务下速度差距微乎其微,只有上亿次高频循环读取场景才会体现差异。
四、垃圾回收(GC)性能
类变量
生命周期绑定类对象,程序运行期间不会被回收,只需要维护一次引用计数。大量实例销毁时,不会频繁变更该变量的引用计数,GC 标记、扫描压力小,GC 停顿(STW)少,高并发服务延迟更稳定。
实例变量
依附单个实例存在,实例创建、销毁都会修改变量引用计数。高频创建销毁临时对象时,会频繁触发 Python 分代 GC,带来程序停顿、接口延迟抖动、系统吞吐量下降等性能问题。
五、可变对象下的并发性能
类变量为 list/dict 等可变容器所有实例指向同一个内存地址,修改容器内部数据无内存拷贝,读取性能高;但多线程并发修改会出现数据竞争,必须加互斥锁,锁竞争、线程上下文切换会大幅降低并发吞吐量,性能严重下降。
实例变量为可变容器每个实例拥有独立内存空间,数据天然隔离,无需加锁,没有并发竞争损耗,高并发场景性能更稳定,代价是内存开销更大。
额外隐性性能损耗(极易踩坑)
通过实例.类变量 = 新值并不是修改类变量,而是在当前实例内存中新建同名实例变量。 若大量实例都执行该赋值操作,原本全局复用的类变量会变成海量独立实例变量,直接导致:内存冗余、缓存命中率降低、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
