浅述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的Django中django-userena组件的简单使用教程
May 30 Python
Python基于DES算法加密解密实例
Jun 03 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
取numpy数组的某几行某几列方法
Apr 03 Python
浅谈Python的list中的选取范围
Nov 12 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Python中的pprint模块
Nov 27 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 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
jQuery live
2009/05/15 Javascript
javascript preload&lazy load
2010/05/13 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
大学生个人求职口试自我评价
2014/02/16 职场文书
争先创优活动总结
2014/08/27 职场文书
生活小常识广播稿
2014/09/16 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android