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插入数据到列表的方法
Apr 30 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
python学习必备知识汇总
Sep 08 Python
一篇文章快速了解Python的GIL
Jan 12 Python
tensorflow实现简单的卷积网络
May 24 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
python模拟实现斗地主发牌
Jan 07 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
python numpy数组中的复制知识解析
Feb 03 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 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生成txt文件标题及内容的方法
2014/01/16 PHP
Javascript中的数学函数
2007/04/04 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
JavaScript中this详解
2015/09/01 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
浅谈js闭包理解
2019/04/01 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
浅析python redis的连接及相关操作
2019/11/07 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python 求10个数的平均数实例
2019/12/16 Python
Python中if有多个条件处理方法
2020/02/26 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
英语专业推荐信
2013/11/16 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
鲁迅故里导游词
2015/02/05 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL