接口测试的核心概念是什么
259
2022-08-31
python观察日志(part12)--基于类的深拷贝与浅拷贝
学习笔记,有错必纠
python代码
一上来,我们先看一段python代码:
# -*- coding: utf-8 -*-import copyclass Bunny(): passclass Dog(): passprint(Bunny)huang = Bunny()print(huang)huang.age = 10ha = Dog()ha.age = 15ha.friend = huanghashiqi = copy.copy(ha)print(ha.age, hashiqi.age)print("ha is hashiqi? ", ha is hashiqi)print("ha's friend is hashiqi's friend? ", ha.friend is hashiqi.friend)shiqi = copy.deepcopy(ha)print(ha.age, hashiqi.age)print("ha is shiqi? ", ha is shiqi)print("ha's friend is shiqi's friend? ", ha.friend is shiqi.friend)
输出结果:
好了,不知道大家有没有看明白,现在我们通过对代码和结果进行解释,来学习几个关于类和深浅拷贝的知识点。
自定义类
在上面的代码中,我们创建了Bunny类和Dog类,并打印了Bunny类(print(Bunny))得到结果
之后,我们创建了一个Bunny对象huang,新建一个对象的过程就叫做实例化,这个对象(huang)这个类(Bunny)的实例。
我们同样打印了对象huang,得到结果<__main__.Bunny object at 0x000000079FD830F0>,这个结果告诉我们对象所属的类型__main__.Bunny,以及存储在内存中的位置0x000000079FD830F0
之后,我们创建Dog类的对象ha,对huang和ha的属性age进行赋值,并将huang赋值给ha的属性friend
深浅拷贝
做完上面的一切后,我们就开始拷贝了。
首先,我们利用copy.copy()函数对ha进行浅拷贝,得到hashiqi,我们打印ha和hashiqi的age,发现都是15:
15 15
再比较这俩是不是同一个对象,和他俩的friend是不是同一个对象,发现ha和hashiqi已经不是同一个对象了,但是他俩friend依然还是同一个对象:
ha is hashiqi? Falseha's friend is hashiqi's friend? True
这就是浅拷贝的特点,它并不会复制对象的内嵌对象。
之后,我们又利用 copy.deepcopy()函数对ha进行深拷贝得到shiqi,我们打印ha和shiqi的age,发现依然是15:
15 15
再比较这俩是不是同一个对象,和他俩的friend是不是同一个对象,发现ha和shiqi不是同一个对象,他俩friend也不是同一个对象了:
ha is shiqi? Falseha's friend is shiqi's friend? False
这就是深拷贝,它不但复制了对象,还复制了对象中引用的对象,甚至是对象引用的对象的对象,以此类推。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~