浅述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实现360皮肤按钮控件示例
Feb 21 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
Python实现遍历数据库并获取key的值
May 17 Python
OpenCV实现人脸识别
Apr 07 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Django logging配置及使用详解
Jul 23 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
Python代码注释规范代码实例解析
Aug 14 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
jQuery中:has选择器用法实例
2014/12/30 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python基于百度AI的文字识别的示例
2018/04/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
对于Python深浅拷贝的理解
2019/07/29 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
Python 图片添加美颜效果
2022/04/28 Python