浅述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和C/C++交互的几种方法总结
May 11 Python
Python中sort和sorted函数代码解析
Jan 25 Python
python爬虫基本知识
Mar 05 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
python使用turtle库绘制奥运五环
Feb 24 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
python图像处理 PIL Image操作实例
Apr 09 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
php strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php实现插入排序
2015/03/29 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
js获取ip和地区
2017/03/10 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python 调用Java实例详解
2017/06/02 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
python从Oracle读取数据生成图表
2020/10/14 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
网络工程师职业规划
2014/02/10 职场文书
财务部岗位职责范本
2015/04/14 职场文书
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers