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类的多重继承问题深入分析
Nov 09 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
python基于multiprocessing的多进程创建方法
Jun 04 Python
Python进程间通信用法实例
Jun 04 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Python中super函数的用法
Nov 17 Python
python实现用户管理系统
Jan 10 Python
opencv python 2D直方图的示例代码
Jul 20 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python打包多类型文件的操作方法
Sep 21 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php事务处理实例详解
2014/07/11 PHP
Chrome Web App开发小结
2014/09/04 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
PHP微商城开源代码实例
2019/03/27 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
Python创建系统目录的方法
2015/03/11 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
Python中存取文件的4种不同操作
2018/07/02 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python的信号库Blinker用法详解
2020/12/31 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
中华魂演讲稿
2014/05/13 职场文书
村容村貌整治方案
2014/05/21 职场文书
公积金接收函格式
2015/01/30 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
小学三年级作文之写景
2019/11/05 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python