浅述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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
python3连接MySQL数据库实例详解
May 24 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
Python可迭代对象操作示例
May 07 Python
python儿童学游戏编程知识点总结
Jun 03 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
python sorted函数原理解析及练习
Feb 10 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
python爬虫用mongodb的理由
Jul 28 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php读取csc文件并输出
2015/05/21 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
初学JavaScript第二章
2008/09/30 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
浅谈js中的bind
2019/03/18 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
java字符串格式化输出实例讲解
2021/01/06 Python
struct与class的区别
2014/02/03 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
学生出入校管理制度
2014/01/16 职场文书
求职简历中自我评价
2014/01/28 职场文书
2014年班组长工作总结
2014/11/20 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
创业计划书之书店
2019/09/10 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS