浅述python中深浅拷贝原理


Posted in Python onSeptember 18, 2018

前言

在c++中参数传递有两种形式:值传递和引用传递。这两种方式的区别我不在此说,自行补上,如果你不知道的话。我先上python代码,看完我们总结一下,代码如下:

# copy module import
import copy

# number and string
a = 12
a1 = a
a2 = copy.copy(a)
a3 = copy.deepcopy(a)
# look addr
print("==========number=======")
print(id(a))
print(id(a1))
print(id(a2))
print(id(a3))

s = '12345'
s1 = s
s2 = copy.copy(s)
s3 = copy.deepcopy(s)
# look addr
print("==========String=======")
print(id(s))
print(id(s1))
print(id(s2))
print(id(s3))

# others
target = {
  'name': 'ckmike',
  'age': 25,
  'boxes':[
    'LV',
    'Prada',
    'KUQI'
  ]
}
target1 = target
target2 = copy.copy(target)
target3 = copy.deepcopy(target)
print("==========dict-1=======")
print(id(target))
print(id(target1))
print(id(target2))
print(id(target3))
print("==========dict-2=======")
print(id(target['boxes']))
print(id(target1['boxes']))
print(id(target2['boxes']))
print(id(target3['boxes']))

输出结果:

==========number=======
10943360
10943360
10943360
10943360
==========String=======
140567123944648
140567123944648
140567123944648
140567123944648
==========dict-1=======
140567124625088
140567124625088
140567124625160
140567123938760
==========dict-2=======
140567099339272
140567099339272
140567099339272
140567099339464

总结:

对于数值、字符串而言,不管是赋值符号还是浅拷贝、深拷贝,都是引用的内存中的同一份值,变量指向同一地址。
对于非数值非字符串而言,浅拷贝只会拷贝对象的第一层,深拷贝则会把所有层都进行拷贝。

Python 相关文章推荐
跟老齐学Python之正规地说一句话
Sep 28 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
Python的argparse库使用详解
Oct 09 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
Python configparser模块操作代码实例
Jun 08 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
python实现指定文件夹下的指定文件移动到指定位置
Sep 17 #Python
python批量复制图片到另一个文件夹
Sep 17 #Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 #Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 #Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 #Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 #Python
python实现简单http服务器功能
Sep 17 #Python
You might like
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
php Session存储到Redis的方法
2013/11/04 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
yii中widget的用法
2014/12/03 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
pandas中的series数据类型详解
2019/07/06 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
Ejb技术面试题
2015/04/29 面试题
列车长先进事迹材料
2014/01/25 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
家长评语怎么写
2014/12/30 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电