今天因为项目中遇到了拷贝,调试结果突然跟自己之前对拷贝相关的认知有点出路,还真跟自己想的有点不一样,看来错了很久,赶紧补下课,记录一下.
1 | import copy |
对于不可变对象(int,string),copy跟deepcopy没有任何区别,使用id也是相同的值,但如果是复杂对象(那些对象中可包含子对象的嵌套对象,如list,tuple)等,就有区别了.
对于包含子对象的复杂对象,copy并未从原对象中真正独立出来,也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变.这跟我们直觉上对「复制」的理解不同.
而deepcopy则是真正的跟原对象没有关系了,对原对象的任何变化都不会影响deepcopy.
代码中如果我们需要拷贝一个对象,且这个对象不受原对象的改变而改变,直接使用deepcopy.