浅述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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
深入解析神经网络从原理到实现
Jul 26 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python中的错误如何查看
Jul 08 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
python中pickle模块浅析
Dec 29 Python
python 实现逻辑回归
Dec 30 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 socket通信简单实现
2016/11/18 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
经典c++面试题二
2015/08/14 面试题
前台接待员岗位职责
2014/01/02 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS