当前位置: 首页 > news >正文

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

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

一、内存占用性能

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

http://www.jsqmd.com/news/1078228/

相关文章:

  • VMware虚拟机从入门到精通:完整安装指南
  • Ministral 3微调指南:面向X光片的视觉-语言协同诊断训练
  • SVM数学直觉:从几何本质到工程调参的实战指南
  • 用pytest构建AI应用测试体系:从语义断言到CI/CD集成
  • 线性代数直觉:用Python形状思维打通机器学习矩阵运算
  • FIFA 23 Live Editor:重新定义你的足球经理生涯体验
  • 手机:人类文明的第三物种
  • LibreTranslate离线包版本历史
  • 溪声山色:当手机成为无情说法
  • 三步打造你的专属游戏串流服务器:Sunshine终极方案指南
  • CROFT、MCP与知识型Agent:Agentic系统工程落地三路径
  • 如何免费解锁Adobe全家桶:Adobe-GenP 3.0完整使用指南
  • 大规模基础设施测试性能优化:5种方法提升pytest-testinfra执行效率
  • Qwen3.6-Plus实战指南:从代码生成到工程协同设计
  • 深度学习图像去重算法:3大技术方案实现高效重复图片检测
  • AG2 + FastAPI 构建可调试可监控的AI智能体服务
  • 如何用一款开源工具实现网盘高速下载:告别限速的完整指南
  • VMware Unlocker 4.2.8 深度解析:非苹果硬件macOS虚拟化技术实现与最佳实践
  • Python机器学习入门实战:线性回归、KNN与决策树全流程手把手
  • Python EXE Unpacker:逆向分析Python可执行文件的完整解决方案
  • 如何深度解析QQ数据库加密机制:专业级跨平台解密实战指南
  • 企业级应用SQL注入漏洞深度剖析:从原理到实战复现
  • 模板驱动文档自动化:结构化内容注入与四层引擎设计
  • Android性能测试实战:Monkey与SoloPi工具组合使用指南
  • Triton+KServe构建高可用模型服务:生产级推理实战指南
  • Rust深度学习绑定实战:PyTorch模型高性能推理落地指南
  • LangChain OutputParser实战:房产文本结构化解析方案
  • 如何用Ai2Psd脚本解决AI到PSD转换的3大核心痛点
  • ROS TurtleBot RViz可视化环境从零搭建指南
  • MAML元学习实战:从原理到工业级少样本缺陷检测