Python 数据处理、算法与内存优化
Python 性能优化与高并发#Python全栈#第二十一阶段#Python 性能优化与高并发#Python 数据处理、算法与内存优化约 807 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
怎样优化循环内反复执行的列表成员查找?
追问 改用 set 或 dict 时,时间与空间会怎样变化?元素可哈希性、重复项和输出顺序有哪些约束,为什么不能只看平均查找复杂度?
列表头部删除频繁时,应该怎样选择数据结构?
追问 list.pop(0) 与 deque.popleft 的成本有什么区别?还需要随机访问或中间插入时,为什么不能只根据一个操作决定全部数据结构?
怎样发现并减少不必要的重复排序?
追问 循环内排序、数据库排序后再次排序与只需前若干项的场景如何区别?稳定排序、相同键的顺序和分页规则怎样保持?
字符串拼接、切片与数据复制会怎样影响大数据处理?
追问 逐次拼接和一次 join 应怎样测量比较?为了避免复制而引入视图或共享缓冲区时,需要注意哪些生命周期和修改问题?
生成器能解决哪些内存问题,又有哪些使用限制?
追问 延迟读取是否一定更快?异常发生时间、一次性消费、重复遍历与底层文件或数据库连接的释放怎样处理?
批处理大小怎样影响速度和峰值内存?
追问 批次太小会增加哪些固定开销,太大又会造成什么问题?怎样用不同数据规模寻找可接受区间,而不是照搬一个固定批量?
内置函数或原生库替代 Python 循环时,需要验证什么?
追问 数据转换、复制与调用开销是否会抵消收益?为什么“由 C 实现”不能直接证明它会释放 GIL,也不能保证任何输入下都更快?
使用 lru_cache 等进程内缓存时,怎样评估实际收益?
追问 命中率、参数种类、容量上限与引用保留怎样影响内存?返回可变对象、结果过期或多 Worker 数据不共享时,有哪些正确性边界?
为什么不应把关闭垃圾回收当作通用优化方法?
追问 引用计数与循环垃圾收集分别涉及哪些对象?如果诊断怀疑收集暂停,应怎样测量收益、观察内存并保证恢复机制?
同一算法在小数据上更快、大数据上更慢,怎样解释?
追问 固定开销、复杂度、内存访问与数据分布各有什么作用?怎样设计多规模基准,避免只用十条数据证明百万条数据的处理能力?