- 区别
-
直接赋值:其实就是对象的引用(别名)。
-
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
-
深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
-
补充:可变对象、不可变对象
【可变对象】:当有需要改变对象内部的值的时候,这个对象的id不发生变化。
【不可变对象】:当有需要改变对象内部的值的时候,这个对象的id会发生变化。
P.S:可变对象(dict/list/set)、不可变对象(int/str/float/tuple)。
- 对不可变对象进行复制、浅/深拷贝
- 对不可变对象,复制/浅拷贝/深拷贝都是引用原对象的内存地址。
- 对于不可变对象,如果原对象发生什么变化,复制/浅拷贝/深拷贝都不会跟着变
- 对可变对象进行复制、浅/深拷贝
- 复制:原对象怎么变,我跟着变
- 浅拷贝:原对象的外层元素地址变化,内层元素的地址不变。
- 深拷贝:原对象的外层/内层元素地址都变化
综上所述,复制相当于是无论什么条件都愿意跟着你结婚的好女孩;浅拷贝相当于有机会回到你身边的前女友,但要看你表现;深拷贝是完全对你死心的前女友。(和面试官可别这么说哈!)