编程学习网 > 编程语言 > Python > 浅拷贝(Shallow Copy) 和深拷贝(Deep Copy) 的区别是什么?
2025
09-27

浅拷贝(Shallow Copy) 和深拷贝(Deep Copy) 的区别是什么?


很多人第一次听到“浅拷贝”和“深拷贝”的时候,都会觉得这俩词挺像的,好像也差不多。但真要在代码里用的时候,往往会遇到一些意想不到的坑。其实这两个概念的区别,本质上就是拷贝的时候,到底是复制对象本身,还是顺带把里面嵌套的东西也复制一份

浅拷贝就好比你复印了一份文件,但里面夹的附件只是写了“参考某某资料”,你复印的时候也只是把这句话带过去,附件本身没动。也就是说,浅拷贝只会拷贝对象的第一层内容,如果对象里面还有嵌套的可变对象,比如列表、字典,它们还是指向原来的地址。

在 Python 里常见的浅拷贝方式有几种,比如用 copy.copy(),或者有些内置方法(像切片)也会默认给你浅拷贝。

你看,最外层的列表确实是新建了一份,但里面的 [2, 3] 还是公用的,所以改了 b 里面的值,a 也跟着变了。

深拷贝就更彻底一些,相当于你不但复印了文件,还把所有的附件、参考资料也都一份份拷贝出来。这样一来,新对象和原对象完全独立,互不影响。

Python 提供了 copy.deepcopy() 来实现深拷贝:

这里就能看到,改了 b 之后,a 完全没受影响,因为内外层都被复制了一份。

什么时候用浅拷贝,什么时候用深拷贝如果对象里面没有嵌套太复杂的结构,或者你本来就希望它们共享一部分数据,那浅拷贝就够用了,速度还快。比如复制一个只有数字的列表,浅拷贝和深拷贝结果其实没差别。 但如果你的数据结构里层层嵌套,或者你特别想保证拷贝之后彼此独立,互不干扰,那就老老实实用深拷贝。

顺带提一句,深拷贝虽然方便,但它会递归地去复制每一层对象,在一些结构特别庞大的场景下,性能和内存占用都会比较高,得小心。

以上就是“浅拷贝(Shallow Copy) 和深拷贝(Deep Copy) 的区别是什么?的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取