python的深层拷贝和浅层拷贝是一个重要但容易忽视的基础知识,这可能会导致代码出现难以定位的错误。
概念
- 浅层拷贝。可以理解为c语言中的引用,改变其中一个值,另一个也会跟着改变。
- 深层拷贝。就是重新生成一个和该变量完全相同的变量,他们值的改变不会相互影响。
- 在python中,数字、字符、元组等不可变对象类型都属于值传递,即深层拷贝。字典和列表等可变对象都属于引用传递,即浅层拷贝。
应用场景
- 如果想要将当前列表赋值给一个新列表保存中间结果,采用深层拷贝。
- 如果在dfs等算法中需要多层传递维护一个共用列表,那么可以直接采用浅层拷贝,即直接赋值。
- 如果在函数中要修改输入的列表,且需要将修改后的结果传回去,那么浅层拷贝可以帮忙节省代码量。
- 如果在函数中要修改输入的列表,而不想影响外部对应的列表,那么需要采用深层拷贝。
深层拷贝和浅层拷贝的示例
- 在这个示例中,直接用
=
赋值就是浅层拷贝,由于是引用传递,因此a
的改变也会导致b
的改变。而采用.copy()
就是深层拷贝,因此a
的改变不会传递给c
。
博主会持续更新一些深度学习相关的基础知识以及工作中遇到的问题和感悟,喜欢请关注、点赞、收藏。