要了解深拷贝和浅拷贝,首先要明确python中的可变类型和不可变类型。
不可变数据类型
- Number(数字)
- String(字符串)
- Tuple(元组)
可变数据类型
- List(列表)
- Dictionary(字典)
- Set(集合)
深拷贝和浅拷贝
浅拷贝
浅拷贝直接
1.对于不可变类型 Number String Tuple,浅复制仅仅是地址指向,不会开辟新空间。
2.对于可变类型 List、Dictionary、Set,浅复制会开辟新的空间地址(仅仅是最顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝
3.浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象的;改变原始对象中为不可变类型的元素的值,只有原始类型受影响。
深拷贝
1.除了顶层拷贝,还对子元素也进行了拷贝
2.经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了