RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子467圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

3
# Python

Python 的 lru_cache 缓存优化怎么用?

functools.lru_cache(maxsize=128):装饰器,自动缓存函数结果(LRU 淘汰),key 为参数(必须可哈希)。用法:@lru_cache(maxsize=None) def fib(n): ...(无上限);查看 cache_info()(命中率)、cache_clear() 清空。应用:递归优化(斐波那契从指数级降线性)、昂贵计算/IO 结果缓存、动态规划。注意:① 参数需可哈希(list 不行,转 tup…

4
# Python

Python 怎么分析对象内存占用?sys.getsizeof 和 tracemalloc

sys.getsizeof(obj):返回对象本身占用的字节数(不含内部引用对象的大小,如 list 只算指针数组不算元素),嵌套需递归累加;标准库功能有限时用 pympler.asizeof 递归估算。tracemalloc:追踪内存分配(Python 分配),tracemalloc.start() → 快照对比(snapshot1.compare_to(snapshot2))定位内存增长来源,输出文件:行号。定位内存泄漏:对比两时刻…

5
# Python

Python 字符串拼接为什么推荐 join 而不是 +?

原因:字符串不可变,用 + 拼接每次生成新字符串并复制(n 次拼接 O(n²) 复杂度、大量临时对象);str.join(iterable) 一次性计算总长分配一次(O(n))。对比:s = ''; for x in parts: s += x(慢)vs ''.join(parts)(快)。f-string 和 format 适合少量拼接(编译期优化)。其他:列表先收集再 join 是标准模式;大量动态拼接用 io.StringIO(文…

8
# Python

Python 性能优化有哪些常用手段?

① 先测量再优化:cProfile、timeit 定位热点;② 数据结构选型:dict/set 查找 O(1) 替代 list 线性;③ 循环优化:局部变量引用(locals() 快于全局)、推导式/内置函数替代手写循环;④ 字符串拼接用 join/f-string 而非 +;⑤ 避免重复计算:lru_cache、缓存中间结果;⑥ 惰性求值:生成器替代大列表;⑦ 算法优化优先(复杂度);⑧ 必要时:C 扩展(Cython、numba J…

9
# Python

Python 的内存管理机制是怎样的?

① 对象引用计数(为主),为 0 立即回收;② 循环引用靠 gc 模块分代收集;③ 内存池:小对象(<512 字节)用 PyMalloc 内存池(arena/block)减少 malloc 调用与碎片,大对象直接用系统 malloc;④ 整数小对象缓存(-5~256)、字符串驻留、复用空容器(小列表/元组);⑤ 对象回收进 free list 复用(如 list/tuple)。查看:sys.getsizeof、tracemalloc 追…

10
# Python

Python 死锁怎么产生?怎么避免?

死锁:两个及以上线程互相持有对方需要的锁且等待不释放(循环等待)。产生条件:互斥、持有并等待、不可剥夺、循环等待。避免:① 锁顺序一致(全局固定加锁顺序);② 一次只持一把锁(锁粒度拆分);③ 用 with 管理生命周期;④ acquire(timeout) 超时放弃重试(不无限等);⑤ 减少持锁时间(锁内不做 IO/耗时);⑥ 死锁检测:faulthandler、pstack 抓线程栈。经典例子:线程 A 持锁 1 等锁 2,线程 B…