当前位置 : 主页 > 编程语言 > python >

python观察日志(part12)--基于类的深拷贝与浅拷贝

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,有错必纠 python代码 一上来,我们先看一段python代码: # -*- coding: utf-8 -*- import copy class Bunny (): pass class Dog (): pass print ( Bunny ) huang = Bunny () print ( huang ) huang . age = 10 ha = Dog ()

学习笔记,有错必纠


python代码



一上来,我们先看一段python代码:

# -*- coding: utf-8 -*-

import copy

class Bunny():
pass

class Dog():
pass

print(Bunny)
huang = Bunny()
print(huang)

huang.age = 10

ha = Dog()
ha.age = 15
ha.friend = huang

hashiqi = 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)



输出结果:

<class '__main__.Bunny'>
<__main__.Bunny object at 0x000000079FD830F0>
15 15
ha is hashiqi? False
ha's friend is hashiqi's friend? True
15 15
ha is shiqi? False
ha's friend is shiqi's friend? False

好了,不知道大家有没有看明白,现在我们通过对代码和结果进行解释,来学习几个关于类和深浅拷贝的知识点。



自定义类



在上面的代码中,我们创建了Bunny类和Dog类,并打印了Bunny类(​​print(Bunny)​​​)得到结果​​<class '__main__.Bunny'>​​​,从中我们可以看出这个Bunny类的全名其实是​​__main__.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? False
ha's friend is hashiqi's friend? True

这就是浅拷贝的特点,它并不会复制对象的内嵌对象。



之后,我们又利用 copy.deepcopy()函数对ha进行深拷贝得到shiqi,我们打印ha和shiqi的age,发现依然是15:

15 15

再比较这俩是不是同一个对象,和他俩的friend是不是同一个对象,发现ha和shiqi不是同一个对象,他俩friend也不是同一个对象了:

ha is shiqi? False
ha's friend is shiqi's friend? False

这就是深拷贝,它不但复制了对象,还复制了对象中引用的对象,甚至是对象引用的对象的对象,以此类推。


上一篇:python观察日志(part11)--管道及MD5文件比较
下一篇:没有了
网友评论