明霞山资源网 Design By www.htccd.com
Python基础教程之浅拷贝和深拷贝实例详解
网上关于Python的深拷贝和浅拷贝的文章很多,这里对三种拷贝进行比较并附实例,大家可以参考下
一般的复制
#encoding:utf-8 #定义一个嵌套集合 lista=[1,2,3,[4,5,6,[7,8,9]]] listb=lista #分别打印出 lista和listb的地址值 print id(lista) #4511103096 print id(listb) #4511103096 #修改lista中的内容,listb中的内容也会跟着修改 lista[0]=0 print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
通过以上实践会发现,复制操作就是将lista在内存中指向的地址,也让listb指向他,本身并没有在内存中创建地址。
浅拷贝
#encoding:utf-8 #定义一个嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #使用copy模块中copy方法 listb=copy.copy(lista) print id(lista) #4396231640 print id(listb) #4396231712 #发现lista和listb在内存中的地址有区别, #打印元素中的第一个元素的地址值 print id(lista[0])#140666751466536 print id(listb[0])#140666751466536 #元素的地址值是一样的,是不是意思就是,改变lista中的第一个元素, # listb中的也要改变呢 lista[0]=0 print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #结果发现,竟然没有跟着lista一起改变,为什么呢,因为使用了浅拷贝呗 #我们在打印下lista[0]和listb[0]的地址 print id(lista[0]) #140666751466560 print id(listb[0]) #140666751466536 #会发现lista[0]重新指向内存中的其他地址 #这时候可以通过以上的方法,修改lista[3],lista[3]也是一个list print id(lista[3])#4499779240 print id(listb[3])#4499779240 #修改lista[3]中第一个元素呢 lista[3][0]=0 print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] #发现修改lista[3][0]元素的值,listb[3][0]也会跟着改变
根据以上实践说明,浅拷贝对对象中对象没有拷贝。
深拷贝
#encoding:utf-8 #定义一个嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #深拷贝功能是在浅拷贝上做的加强,所以具备浅拷贝的功能 listb=copy.deepcopy(lista) lista[3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #深拷贝会解决修改lista[3][0]值不会影响listb中的值 #再来修改下第三层列表中元素是不是也完成拷贝 lista[3][3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #没有受到任何影响
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。