python--深浅拷贝理解
# 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
# 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象
#list2=list1 -->这个不叫拷贝
list1 =[1,2,[11,22,33],{"a":1,"b":2}] list2=list1.copy() print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3])) print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3])) print(id(list1)) print(id(list2)) list1[0]=11 list1[1]=22 list1[2][0]=44 list1[3]["a"]=3 print(list1) print(list2) print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3])) print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3]))
/usr/local/bin/python3.8 "/Users/futantan/PycharmProjects/S14/day 7 /copy.py" 4475763344 4475763376 4479800448 4478424320 4475763344 4475763376 4479800448 4478424320 4479802816 4479799616 [11, 22, [44, 22, 33], {'a': 3, 'b': 2}] [1, 2, [44, 22, 33], {'a': 3, 'b': 2}] 4475763664 4475764016 4479800448 4478424320 4475763344 4475763376 4479800448 4478424320 Process finished with exit code 0
#如上所看,改变了list 中的可变类型(int float等,list1 list1变成了修改后的,list2不变)
#改变了list1 的不可变类型,则id 不变(内存地址不变)值发生了改变,列表和字典本身没有发生改变
#可变可不变类型
#可变类型:值改变,id不变,
#不可变类型,值改变,id也改变了,证明是产生了新的值,压根没有改变原址,证明原值是不可以被改变的。
# 2验证
# int 是不可变类型
# x=10
# print (id(x))
# x=11
# print (id(x))
#2.2 float 也是不可变
# x=10.1
# print (id(x))
# x=11.2
# print (id(x))
# #2.2 str 也是不可变
# x="abc"
# print (id(x))
# x="ert"
# print (id(x))
"""小结:int float str 都是被设计成不可分割的整体,不能被改变"""
深拷贝
import copy list1 =[1,2,[11,22,33],{"a":1,"b":2}] list3=copy.deepcopy(list1) print(list1) print(list3) print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3])) print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3])) list1[0]=11 list1[1]=22 list1[2][0]=44 list1[3]["a"]=3 print(list1) print(list3) print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3])) print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3]))
1 2 3 4 5 6 7 8 9 10 11 | / usr / local / bin / python3. 8 "/Users/futantan/PycharmProjects/S14/day 7 /深浅拷贝.py" [ 1 , 2 , [ 11 , 22 , 33 ], { 'a' : 1 , 'b' : 2 }] [ 1 , 2 , [ 11 , 22 , 33 ], { 'a' : 1 , 'b' : 2 }] 4478016144 4478016176 4482064448 4480681216 4478016144 4478016176 4482058112 4480729472 [ 11 , 22 , [ 44 , 22 , 33 ], { 'a' : 3 , 'b' : 2 }] [ 1 , 2 , [ 11 , 22 , 33 ], { 'a' : 1 , 'b' : 2 }] 4478016464 4478016816 4482064448 4480681216 4478016144 4478016176 4482058112 4480729472 Process finished with exit code 0 |
每天进步一点点~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!