深拷贝和浅拷贝 基本概念 ⁃ Python中一切皆对象 ⁃ 对象可分为不可变对象和可变对象两种 ⁃ 变量在内存中开辟的地址称为引用 引用赋值 ⁃ 对象间的赋值操作是对地址的引用操作 ⁃ 在不可变对象赋值时,不可变对象不会被修改,而是会新开辟一个空间 ⁃ 在可变对象中赋值时,只是将可变对象中保存的引用进行更改 拷贝 ⁃ 使用 copy 模块完成拷贝 ⁃ copy模块可以实现浅拷贝和深拷贝两种拷贝 浅拷贝 ⁃ 使用 copy 模块中的 copy 方法 ⁃ 对于不可变对象,浅拷贝和赋值没有区别 ⁃ 对于可变对象,只复制当前对象的第一层引用。 ⁃ 如果可变对象中的对象发生变化 ,拷贝对象也随之变化 深拷贝 ⁃ 使用 copy 模块中的 deepcopy 方法 ⁃ 对于不可变对象,深拷贝和赋值没有区别 ⁃ 对于可变对象,深拷贝会逐层拷贝所有的数据的引用 ⁃ 修改可变对象中的对象数据时,拷贝对象不会随之变化 默认拷贝方式 ⁃ 程序中默认使用浅拷贝 浅拷贝的几种实现形式 ⁃ copy 模块的 copy 方法 ⁃ 对象本身的 copy 方法 ⁃ 工厂方法 ⁃ 切片 浅拷贝的优势 ⁃ 拷贝时间短 ⁃ 占用空间少 ⁃ 拷贝效率高 举例: 不可变 : (1) a = 1 b= a 变a # ( a 是不可变的 ---------->开辟新的空间) b # ----->不变 (2) 可变的变量: a = lost[1,2,3] b = a 变a (a 是可变的 ------->引用同一个的地址 不变) b (是------> 不变) 不可变对象拷贝 和 赋值一样