浅述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的PIL模块来进行图片对比
Feb 18 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python编程argparse入门浅析
Feb 07 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python3匿名函数用法示例
Jul 25 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
python3+selenium自动化测试框架详解
Mar 17 Python
django中forms组件的使用与注意
Jul 08 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
Python-for循环的内部机制
Jun 12 Python
使用python绘制横竖条形图
Apr 21 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
加速XP搜索功能堪比vista
2007/03/22 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python元组及文件核心对象类型详解
2018/02/11 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Servlet的生命周期
2013/08/25 面试题
销售人员中英文自荐信
2013/09/22 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
车辆工程专业求职信
2014/04/28 职场文书
钱学森观后感
2015/06/04 职场文书
初中体育教学随笔
2015/08/15 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Python实现Hash算法
2022/03/18 Python