四、数据类型 9.可变类型的深浅拷贝
2021/12/14 6:17:37
本文主要是介绍四、数据类型 9.可变类型的深浅拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
深拷贝和浅拷贝
浅拷贝 引用(地址)拷贝,并没有产生新的内存空间 如果copy的是对象,原对象和副本对象都指向同一个内存空间,且只copy父对象,不会copy对象内部的子对象 深拷贝 会产生新的内存空间,原数据和副本数据保持各自独立 如果copy的是对象,原对象和副本对象指向不同内存空间,且会copy对象及其子对象(产生新的内存空间) 作用 1.减少内存使用 2.数据清洗、修改、入库时保留备份 copy copy.copy(var) 功能:浅copy copy.deepcopy(var) 功能:深copy
可变类型数据深浅copy
可变类型数据深浅copy 浅copy:copy最外层对象的值,产生新的内存空间,其中的子对象仅被引用,不会被copy 深copy:copy最外层对象和所有子对象,子对象会产生新的内存空间
import copy # 可变类型数据的深拷贝与浅拷贝 # 浅拷贝 def copy_test(): varlist = [1,2,3,['a','b','c']] newlist = copy.copy(varlist) # 两个list是不同对象 print(varlist,id(varlist)) print(newlist,id(newlist)) # 操作一维元素 del newlist[0] print(newlist) print(varlist) # 操作多维元素,此时的操作同样作用于原list del newlist[2][0] print(newlist) print(varlist) # 发生以上情况的原因是,list中的多维元素是同一个对象, # copy()只复制了最外层list,两个list中的多维元素引用了内存中的同一个数据 print(id(newlist[2])) print(id(varlist[3])) # copy_test() [1, 2, 3, ['a', 'b', 'c']] 196300264456 [1, 2, 3, ['a', 'b', 'c']] 196459832264 [2, 3, ['a', 'b', 'c']] [1, 2, 3, ['a', 'b', 'c']] [2, 3, ['b', 'c']] [1, 2, 3, ['b', 'c']] 196300263944 196300263944 print('----------------------------------') # 深拷贝 def deepcopy_test(): varlist = [1,2,3,['a','b','c']] newlist = copy.deepcopy(varlist) print(newlist) print(id(newlist[3])) print(id(varlist[3])) del newlist[3][0] print(newlist) print(varlist) deepcopy_test() [1, 2, 3, ['a', 'b', 'c']] 599371649544 599212970504 [1, 2, 3, ['b', 'c']] [1, 2, 3, ['a', 'b', 'c']]
# 深浅拷贝对比 A = {1:'a'} B = [2,3,A] C = (4,5) D = [B,C] print('A:',A,id(A)) print('B[2]:',B[2],id(B[2])) print('D[0][2]:',D[0][2],id(D[0][2])) print('B:',B,id(B)) print('D[0]:',D[0],id(D[0])) print('D:',D,id(D)) # 浅拷贝 # E = copy.copy(D) # print('E:',E,id(E),' E[0]:',E[0],id(E[0]),' E[0][2]:',E[0][2],id(E[0][2])) # 深拷贝 E = copy.deepcopy(D) print('E:', E, id(E), ' E[0]:', E[0], id(E[0]),' E[0][2]:',E[0][2],id(E[0][2])) print('------------------------------------------------') A[6] = 'b' B.insert(3,70) print('A:',A,id(A)) print('B',B,id(B)) print('D:',D,id(D),' D[0]:',id(D[0]),' D[0][2]:',id(D[0][2])) print('E:',E,id(E),' E[0]:',id(E[0]),' E[0][2]:',id(E[0][2])) A: {1: 'a'} 663909056088 B[2]: {1: 'a'} 663909056088 D[0][2]: {1: 'a'} 663909056088 B: [2, 3, {1: 'a'}] 663880618504 D[0]: [2, 3, {1: 'a'}] 663880618504 D: [[2, 3, {1: 'a'}], (4, 5)] 663880619016 E: [[2, 3, {1: 'a'}], (4, 5)] 664039138440 E[0]: [2, 3, {1: 'a'}] 664039138376 E[0][2]: {1: 'a'} 663909056328 ------------------------------------------------ A: {1: 'a', 6: 'b'} 663909056088 B [2, 3, {1: 'a', 6: 'b'}, 70] 663880618504 D: [[2, 3, {1: 'a', 6: 'b'}, 70], (4, 5)] 663880619016 D[0]: 663880618504 D[0][2]: 663909056088 E: [[2, 3, {1: 'a'}], (4, 5)] 664039138440 E[0]: 664039138376 E[0][2]: 663909056328
这篇关于四、数据类型 9.可变类型的深浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?