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翻译软件实现代码(使用google api完成)
Nov 26 Python
python爬虫常用的模块分析
Aug 29 Python
python链接Oracle数据库的方法
Jun 28 Python
如何将python中的List转化成dictionary
Aug 15 Python
python执行使用shell命令方法分享
Nov 08 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
OpenCV 边缘检测
Jul 10 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
Python中关于浮点数的冷知识
Sep 22 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
Pygame Draw绘图函数的具体使用
Nov 17 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
德购商城:德国进口直邮商城
2017/06/13 全球购物
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
大学课外活动总结
2014/07/09 职场文书
医院合作协议书
2014/08/19 职场文书
js Proxy的原理详解
2021/05/25 Javascript
anaconda python3.8安装后降级
2021/06/11 Python