浅述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简单的函数定义和用法实例
May 07 Python
Python实现计算最小编辑距离
Mar 17 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
20招让你的Python飞起来!
Sep 27 Python
python中subprocess批量执行linux命令
Apr 27 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
pandas计数 value_counts()的使用
Jun 24 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
python通过函数名调用函数的几种场景
Sep 23 Python
提高python代码运行效率的一些建议
Sep 29 Python
python区块链持久化和命令行接口实现简版
May 25 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
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php实现aes加密类分享
2014/02/16 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP中的表达式简述
2016/05/29 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
详解vue-cli中配置sass
2017/06/21 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
初步剖析C语言编程中的结构体
2016/01/16 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python实现Linux监控的方法
2019/05/16 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python文件操作的简单方法总结
2019/11/07 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
校园广播稿精选
2014/10/01 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
Django实现翻页的示例代码
2021/05/24 Python