183、深浅拷贝的边界:copy、deepcopy 的性能陷阱与自定义类的 __copy__ 实现

183、深浅拷贝的边界:copy、deepcopy 的性能陷阱与自定义类的copy实现

上周五晚上十一点,我盯着屏幕上的内存监控曲线,CPU 风扇转得像要起飞。一个跑了三小时的批量数据处理脚本,内存占用从 200MB 飙到了 2.8GB,然后直接 OOM 被系统 kill 掉。排查到最后,罪魁祸首是一行deepcopy——我天真地以为它只是“深一点”的复制,结果它把整个对象图里的每个原子都克隆了一遍,包括那些根本不该被复制的共享缓存。

这种坑,踩过一次就忘不掉。今天聊聊 Python 里深浅拷贝的边界问题,尤其是当你开始写自定义类、处理复杂数据结构时,copydeepcopy的性能陷阱,以及如何用__copy____deepcopy__给自己留条后路。

先搞清楚:浅拷贝到底“浅”在哪

很多人以为copy.copy就是“复制一层”,其实更准确的说法是:它复制了容器对象本身,但容器内的元素还是指向原来的对象。看个例子:

importcopy original=