浅述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实现二叉搜索树
Feb 03 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
python七夕浪漫表白源码
Apr 05 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
详解Python3中的 input() 函数
Mar 18 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
python实现KNN近邻算法
Dec 30 Python
python实现控制台输出颜色
Mar 02 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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文件上传类
2016/08/29 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
JavaScript字符串对象
2017/01/14 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
vue使用监听实现全选反选功能
2018/07/06 Javascript
python二分查找算法的递归实现方法
2016/05/12 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
python实现飞机大战项目
2020/03/11 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
css sprite简单实例
2016/05/23 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
活动邀请函范文
2014/01/19 职场文书
四查四看整改措施
2014/09/19 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
三八节活动主持词
2015/07/04 职场文书
退休欢送会致辞
2015/07/31 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL
css3 选择器
2022/05/11 HTML / CSS
讨论nginx location 顺序问题
2022/05/30 Servers
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python