周三下午,一位后端工程师盯着屏幕上的内存报告发呆——明明只存了1000条数据,Python进程却吃掉了8GB内存。
问题藏在列表的"诚实"假象里。Python列表为了快速索引,会在内存中预留连续空间。当你不断追加元素时,它并非精确扩容,而是按倍数预分配:4、8、16、32……这种策略牺牲了内存效率换取时间性能。
打开网易新闻 查看精彩图片
更隐蔽的陷阱是浅拷贝。用list()或切片[:]复制嵌套列表时,内层对象仍是引用共享。修改"副本"可能意外篡改原始数据,调试时极易踩坑。
打开网易新闻 查看精彩图片
解决方案分场景:数据量固定时用array.array或NumPy节省内存;需要不可变序列直接换tuple;深拷贝必须用copy.deepcopy切断引用链。
打开网易新闻 查看精彩图片
列表没撒谎,它只是按自己的规则运行。读懂这些规则,才能让它真正为你工作。
热门跟贴