python-深浅复制,可变/不可变对象
#深复制(拷贝) ''' import copy a=[1,2,3,[4,5,6]] #深拷贝 a_deepcopy=copy.deepcopy(a) print(id(a)) #140399549872448 print(id(a_deepcopy)) #140399549873280 a[2]=100 print(a) #[1, 2, 100, [4, 5, 6]] print(a_deepcopy) #[1, 2, 3, [4, 5, 6]] a[3][0]=10 print(a) #[1, 2, 100, [10, 5, 6]] print(a_deepcopy) #[1, 2, 3, [4, 5, 6]] #改变a的元素,复制后的数据不会随着改变而改变 ''' #浅拷贝:数据办共享,复制 数据会独立存放,但是只拷贝成功到元数据的第一层,也就是拷贝后的第二层数据会随原数据改变 # import copy # a=[1,2,3,[4,5,6]] # #深拷贝 # a_copy=copy.copy(a) # print(id(a)) #140460666104000 # print(id(a_copy)) #140460666104832 # a[2]=100 # print(a) #[1, 2, 100, [4, 5, 6]] # print(a_copy) #[1, 2, 3, [4, 5, 6]] # '''第一层没有随之改变''' # a[3][0]=10 # print(a) #[1, 2, 100, [10, 5, 6]] # print(a_copy) #[1, 2, 3, [10, 5, 6]] '''第二层会随之发生变化''' ''' 深拷贝:完全复制,原数据发生变化,备份数据不会有任何影响,提高数据的存放安全性----日常备份 浅拷贝:半复制半数据共享,原数据第二层发生变化,备份数据也会随之发生变化 浅拷贝的应用场景---如日常办公时,在一个表时给链接🔗另一个表的数据,希望一个表数据更新,另一个表也能数据更新 ''' '''不可变对象 ,针对的是值(数据内容)来说的,原变量内容不可变,地址会发生改变 常见不可变对象类型: 数值类型int,bool,float,complex(复数) 字符型:str 元组 tuple''' # i=70 # print(id(i)) #查看内存地址4498359088 # i+=2 # print(i) # print(id(i)) #4498359152 #不可变对象的地址上的值是不能修改的,如果修改了这个对象的值,它指向的地址也会发生变化 # #如tuple,是不可变对象,代码会安全,在实际应用中,尽量使用不可变对象 # t=(1,2,3) # t[1]=333 # print(t) #TypeError: 'tuple' object does not support item assignment '''可变对象:存储的数据内容可以在存储空间直接被修改''' # m=[1,3,5,7] # print(m) #[1, 3, 5, 7] # print(id(m)) #140442888567424 # m+=[6] # print(m) [1, 3, 5, 7, 6] # print(id(m)) #140442888567424 set1={1,2,3,'qqq'} print(set1,type(set1),id(set1)) #{1, 2, 3, 'qqq'} <class 'set'> 140590395203648 set1.add(222) print(set1,type(set1),id(set1)) #{1, 2, 3, 'qqq', 222} <class 'set'> 140590395203648
每天进步一点点~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南