浅述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 getopt详解及简单实例
Dec 30 Python
Tensorflow简单验证码识别应用
May 25 Python
Python使用filetype精确判断文件类型
Jul 02 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
django foreignkey(外键)的实现
Jul 29 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
Django ValuesQuerySet转json方式
Mar 16 Python
python opencv进行图像拼接
Mar 27 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
Python类的继承super相关原理解析
Oct 22 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php+mysql实现数据库随机重排实例
2014/10/17 PHP
8个必备的PHP功能开发
2015/10/02 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
python实现在sqlite动态创建表的方法
2015/05/08 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
django解决订单并发问题【推荐】
2019/07/31 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
英语演讲稿3分钟
2014/04/29 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
学籍证明模板
2014/11/21 职场文书
2014年教研工作总结
2014/12/06 职场文书
毕业设计工作总结
2015/08/14 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
win10更新失败无限重启解决方法
2022/04/19 数码科技