先定义一个字典,有嵌套的列表子对象,通过深浅拷贝之后看结果
import copy
student_info = {'name':'Nancy','sex':'female','subject':['PE','math','chinese']}
进行浅拷贝操作
shallow_student_info = student_info.copy()
进行深拷贝操作
deep_student_info = copy.deepcopy(student_info)
修改student_info字典变量
student_info['subject'][0] = 'english'
打印深浅拷贝结果
print(f"shallow_student_info:{shallow_student_info}") # 浅拷贝
print(f"deep_student_info: {deep_student_info}") #深拷贝
查看运行结果
shallow_student_info:{'name': 'Nancy', 'sex': 'female', 'subject': ['english', 'math', 'chinese']}
deep_student_info: {'name': 'Nancy', 'sex': 'female', 'subject': ['PE', 'math', 'chinese']}
通过运行的结果可以看出,修改了原来student_info列表信息
浅拷贝的变量shallow_student_info也跟着变了
深拷贝的变量deep_student_info没有发生变化
总结:
父对象:最外层容器
子对象:嵌套容器就是子对象
1、浅拷贝是拷贝父对象,引用子对象,如子对象是列表,拷贝的就是内存地址
2、深拷贝是拷贝父对象和子对象
3、深拷贝只在嵌套的容器对象内使用才有意义
程序中使用的拷贝一般是浅拷贝,具有拷贝速度快、效率高,占用空间少的优势