【面试Python基础刷题】赋值、浅拷贝和深拷贝区别

【面试Python基础刷题】赋值、浅拷贝和深拷贝区别
参考

  1. 区别
  • 直接赋值:其实就是对象的引用(别名)。

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

  • 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

  • 补充:可变对象、不可变对象
    【可变对象】:当有需要改变对象内部的值的时候,这个对象的id不发生变化。
    【不可变对象】:当有需要改变对象内部的值的时候,这个对象的id会发生变化。
    P.S:可变对象(dict/list/set)、不可变对象(int/str/float/tuple)。

  1. 对不可变对象进行复制、浅/深拷贝
  • 对不可变对象,复制/浅拷贝/深拷贝都是引用原对象的内存地址。
  • 对于不可变对象,如果原对象发生什么变化,复制/浅拷贝/深拷贝都不会跟着变
  1. 对可变对象进行复制、浅/深拷贝
  • 复制:原对象怎么变,我跟着变
  • 浅拷贝:原对象的外层元素地址变化,内层元素的地址不变。
  • 深拷贝:原对象的外层/内层元素地址都变化
    综上所述,复制相当于是无论什么条件都愿意跟着你结婚的好女孩;浅拷贝相当于有机会回到你身边的前女友,但要看你表现;深拷贝是完全对你死心的前女友。(和面试官可别这么说哈!)