昨晚那个 bug 现在想起来还胃疼。手上有个 config 对象,里头套了几层子结构,我图省事直接 dst = src.copy() 拷了一份去改。copy() 干的事叫"浅拷贝"(shallow copy):只复制最外层的壳,嵌套的对象还是同一块内存的引用(reference,可以理解成指向同一份数据的指针)。
离谱的来了:我在副本上动了一个字段,原始那份也跟着变。src 和 dst 在代码里是两条独立变量,数据却像连体婴儿似地同步。最折磨的是排查阶段——逻辑上根本找不到它俩哪儿有交集,单步走到怀疑人生。其实
正解其实简单:要彻底隔离就上 deepcopy(深拷贝,把每一层都递归复制成独立的一份),或者手动展开加递归自己控粒度。写的时候脑子里得绷一根弦:这个东西现在是"值"还是"引用"?边界分不清,浅拷贝就会在最不防备的地方捅你一刀。这玩意儿不报错不崩溃,就默默把数据改了,阴得很。