浅述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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python语法快速入门指南
Oct 12 Python
Python中模块与包有相同名字的处理方法
May 05 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
selenium+python实现自动登录脚本
Apr 22 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
python使用Geany编辑器配置方法
Feb 21 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
keras:model.compile损失函数的用法
Jul 01 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python套接字socket通信
Apr 01 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安全编程之加密功能
2006/10/09 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
jquery text()要注意啦
2009/10/30 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
详解vue axios中文文档
2017/09/12 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python中的编码知识整理汇总
2016/01/26 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Django框架模板用法入门教程
2019/11/04 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
国际商务系学生个人的自我评价
2013/11/26 职场文书
职工运动会邀请函
2014/01/19 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
暑期教师培训方案
2014/06/07 职场文书
预防传染病方案
2014/06/14 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS