python3 深浅copy对比详解


Posted in Python onAugust 12, 2019

一、赋值对比

1、列表

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2)        #[1, 2, 3, 'a'] [1, 2, 3, 'a']
print(id(l1),id(l2))     #43499848 43499848
#可以看到两个列表的值以及id值相同,对应的是同一个内存地址

2、字典

dic = {'name':'barry'}
dic1 = dic
dic['age'] = 18
print(dic,dic1)      #{'name': 'barry', 'age': 18} {'name': 'barry', 'age': 18}
print(id(dic),id(dic1))    #31157344 31157344
#可以看到两个字典的值以及id值相同,对应的是同一个内存地址

3、字符串

s = 'alex'
s1 = s
s2 = s.replace('a','A')
print(s,s1,s2)         #alex alex Alex
print(id(s),id(s1),id(s2))      #31040208 31040208 31040376
#赋值是同一个内存地址,替换字符串后的变量s2是另外的地址

二、深浅copy

1、浅copy

对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。

# 1、普通浅copy

l1 = [1,2,3,4]
l2 = l1.copy()
l1.append('a')
print(l1,l2)           #[1, 2, 3, 4, 'a'] [1, 2, 3, 4]
print(id(l1),id(l2))       #37077320 37078664
#id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化

# 2、嵌套浅copy

import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2)          #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2)          # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048

2、 深copy.deepcopy()

对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。

import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2)          #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2)          # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python从网络读取图片并直接进行处理的方法
May 22 Python
Django自定义manage命令实例代码
Feb 11 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
python实现高斯判别分析算法的例子
Dec 09 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
Django获取该数据的上一条和下一条方法
Aug 12 #Python
python中的反斜杠问题深入讲解
Aug 12 #Python
Django CBV与FBV原理及实例详解
Aug 12 #Python
Python利用requests模块下载图片实例代码
Aug 12 #Python
django+tornado实现实时查看远程日志的方法
Aug 12 #Python
Django结合ajax进行页面实时更新的例子
Aug 12 #Python
django fernet fields字段加密实践详解
Aug 12 #Python
You might like
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
素质教育学习心得体会
2016/01/19 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS