学习笔记,有错必纠


python代码

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

# -*- coding: utf-8 -*-import copyclass Bunny():passclass Dog():passprint(Bunny)
huang = Bunny()
print(huang)huang.age = 10ha = Dog()
ha.age = 15
ha.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)

输出结果:

<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观察日志(part12)--基于类的深拷贝与浅拷贝相关推荐

  1. python中copy模块的使用,深拷贝和浅拷贝

    python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...

  2. C++ 类的深拷贝和浅拷贝完美解决

    //类的深拷贝和浅拷贝 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Point ...

  3. C++ 类的深拷贝与浅拷贝||深拷贝通过重载拷贝构造函数与重载赋值运算符实现

    http://blog.csdn.net/wangshihui512/article/details/9842225 在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作. 如果对象在申明的同 ...

  4. python观察日志(part15)--命名元祖namedtuple

    学习笔记,有错必纠 命名元祖namedtuple 有很多简单的对象其实可以看做几个相关值的集合,例如,在下面这段代码中,我们定义Point类,它包含两个数字x和y: class Point:def _ ...

  5. python观察日志(part9)--数据库与pickle模块

    学习笔记,有错必纠 数据库 数据库是一个有组织的用于存储数据的文件,许多数据库都像字典一样组织数据,因为它也将键映射到值上,数据库和字典之间最大的区别是数据库是保存在磁盘上的(或者其他永久存储上),所 ...

  6. python观察日志(part24)--列表和numpy数组扁平化

    学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...

  7. python观察日志(part22)--设置工作目录及文件读取

    学习笔记,仅供参考 参考自:pandas.read_csv参数详解:<python编程从数据分析到数据编程> 查看并更改当前工作目录 当前工作目录就是python(准确的说,是python ...

  8. python观察日志(part21)--ord,chr,unichr方法的联系与区别

    学习笔记,仅供参考,有错必纠 参考自:python 的 ord(). chr(). unichr() 函数; 菜鸟教程 ord,chr,unichr方法的联系与区别 ord方法 ord方法以一个长度为 ...

  9. python观察日志(part20)--列表中加号,extend,append之间的区别

    学习笔记,仅供参考,有错必纠 列表中"+"加号,extend,append之间的区别 extend extend函数用于在列表末尾一次性追加另一个序列中的多个值. append a ...

最新文章

  1. java实现局域网内单对单和多对多通信的设计思路
  2. 微信也在用的Transformer加速推理工具 | 腾讯第100个对外开源项目
  3. python计算出nan_python如何进行汇总统计?
  4. 【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
  5. Oracle过滤与排序
  6. apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本
  7. python增量更新数据_Python标准库——加密
  8. 【实物】端到端自动驾驶搭建教程(四)附完整资料
  9. ulipad.4.1.zip linux,在ubuntu中安装ulipad
  10. java鼠标监听事件_Java鼠标事件监听器的创建和使用教程及代码
  11. mysql无法连接locahost_完美解决MySQL通过localhost无法连接数据库的问题
  12. Java 多线程 面试题
  13. 如何通过vin及发动机号查询车辆出险、理赔、事故记录
  14. 工商管理专业的毕业论文怎么选题?
  15. 焦作师范高等专科学校计算机,热烈欢迎丨焦作师范高等专科学院计算机与信息工程学院莅临智游...
  16. 【Python】Matplotlib画图(七)——线的颜色、点的形状
  17. iphone之Info.plist的属性
  18. vue-cli和Element-UI搭配web前端
  19. 树莓派远程桌面连接-使用Windows自带远程桌面连接工具
  20. Android开发指南 1──应用程序基础

热门文章

  1. 3.3 参数估计:贝叶斯估计
  2. 牛客网 在线编程 回文链表
  3. 判断元素是否在ndarray_专业文章 | 如何判断是否构成有“一定影响”的包装装潢...
  4. vue 中watch函数名_VUE中watch用法
  5. 微型计算机接口技术常见问题,《微型计算机接口技术及应用》期末考试试卷及问题详解(64页)-原创力文档...
  6. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...
  7. 构造数列中的常见变形总结【中阶和高阶辅导】
  8. iPhone设备分辨率及尺寸
  9. 9.6Gbps WiFi联盟宣布802.11ax协议!
  10. Slide:配置Oracle 10g双向流复制