深拷贝、浅拷贝
1. 浅拷贝
浅拷贝是对于一个对象的顶层拷贝
通俗的理解是:拷贝了引用,并没有拷贝内容
2. 深拷贝
深拷贝是对于一个对象所有层次的拷贝(递归)
进一步理解深拷贝
3. 拷贝的其他方式
切片表达式可以赋值一个序列
字典的copy方法可以拷贝一个字典
4. 注意点
浅拷贝对不可变类型和可变类型的copy不同
copy.copy对于可变类型,会进行浅拷贝
copy.copy对于不可变类型,不会拷贝,仅仅是指向
copy.copy和copy.deepcopy的区别
copy.copy
copy.deepcopy
总结:
浅拷贝是对一个对象的顶层(外层)拷贝,只是拷贝了引用,并没有拷贝内容。
变量的赋值是地址的引用,也算是一种浅拷贝。
copy.copy()
深拷贝则是对一个对象深层(递归)的拷贝。
copy.deepcopy()
可变类型:列表、字典
不可变类型:数字类型、字符串型、元组
如果是可变类型,浅拷贝只拷贝外层,而深拷贝是完全拷贝
如果是纯的不可变类型,那么无论是浅拷贝还是深拷贝,都只是指向同一个地址。如果不可变类型里面还存在可变类型,则浅拷贝是指向,而深拷贝则为完全拷贝。
(了解)列表切片、字典的copy方法均属于浅拷贝