根据数据类型分为两部分进行剖析:

  • int、str类型     
  • list、tuple、dict类型等

1.  int、str类型

【int类型实例】
>>> import copy # 导入copy模块
>>> a1=11
>>> a2=a1 # 直接赋值引用
>>> a3=copy.copy(a1) # 浅拷贝
>>> a4=copy.deepcopy(a1) # 深拷贝
>>> id(a1),id(a2),id(a3),id(a4)
>>> (1357559168, 1357559168,1357559168,1357559168) 【str类型实例】
>>> import copy # 导入copy模块
>>> b1='css'
>>> b2=b1 # 直接赋值引用
>>> b3=copy.copy(b1) # 浅拷贝
>>> b4=copy.deepcopy(b1) # 深拷贝
>>> id(b1), id(b2),id(b3),id(b4)
>>> (43826624,43826624,43826624,43826624)

由以上实例可得出:int和str类型,无论是直接赋值引用 or 深浅拷贝,均指向同一块内存空间,因此对于int和str类型的变量而言,三种方法作用相同

2. list、tuple、dict等类型(以list类型为例

【示例】
>>> import copy # 导入copy模块
>>> L1=[11,22,33,['a','b','c']] # 定义list变量,其中L1[3]的值是一个子列表
>>> L2=L1 # 直接赋值引用
>>> L3=copy.copy(L1) # 浅拷贝
>>> L4=copy.deepcopy(L1) # 深拷贝
>>> id(L1),id(L2),id(L3),id(L4)
>>> (43777928,43777928,43776968,43795912)
>>> L1.append(44) # L1列表父对象添加元素
>>> L1[3].append('d') # L1列表子对象添加元素
>>> L1
>>> [11,22,33,['a','b','c','d'],44]
>>> L2
>>> [11,22,33,['a','b','c','d'],44]
>>> L3
>>> [11,22,33,['a','b','c','d']]
>>> L4
>>> [11,22,33,['a','b','c']]

以上示例说明:

1. 直接赋值即是对象的引用,指向同一内存地址

2. 浅拷贝:只拷贝一层,如上述示例,只拷贝父对象,不拷贝父对象内部的子对象(L3[3]仍指向原L1子对象的内存地址),故分别在L1父对象和子对象中添加元素44和'd', 对L3父对象无影响,只对其子对象有影响

3. 深拷贝:拷贝父对象及子对象

最新文章

  1. SQL 还原数据库
  2. 两千行PHP学习笔记
  3. 解决电脑访问Discuz!手机版(支持触屏版)
  4. Deep Learning 学习笔记——第9章
  5. SimpleUrlHandlerMapping 处理器映射的配置--转
  6. 1.7.4.3 Parsers
  7. C扩展Python - official docs - defining new type
  8. Android Activity 管理
  9. Android学习总结——去除标题栏
  10. 监听SWT文本框只能输入数字
  11. Sass初学者超强十分钟入门
  12. python 爬取B站视频弹幕信息
  13. AGC010 - D: Decrementing
  14. scrapy 模拟登陆
  15. 下载带有kali linux系统的VMware如何打开虚拟机?
  16. WD与地图 解题报告
  17. consul 文档
  18. MySQL基本简单操作03
  19. C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化
  20. Shell循环输入符合条件为止

热门文章

  1. python之重写父类方法
  2. PHP常见的输出语句 echo()、print()、print_r()、var_dump()、pinrtf()之间的区别
  3. Windows下DVWA安装指南
  4. jQuery access()方法
  5. Python打开目录下所有文件
  6. springboot 配置Ehcache
  7. oracle常用数据类型&约束条件(及案例)
  8. Spring boot Jpa添加对象字段使用数据库默认值
  9. Spring-bean(二)
  10. synchronize早已经没那么笨重