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 相关文章推荐
在win和Linux系统中python命令行运行的不同
Jul 03 Python
pyenv命令管理多个Python版本
Mar 26 Python
python八大排序算法速度实例对比
Dec 06 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python实现爬取图书封面
Jul 05 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
python区块及区块链的开发详解
Jul 03 Python
使用python socket分发大文件的实现方法
Jul 08 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
python批量修改交换机密码的示例
Sep 22 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获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
比较完整的微信开发php代码
2016/08/02 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python实现包含min函数的栈
2016/04/29 Python
python3大文件解压和基本操作
2017/12/15 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
企业宣传工作方案
2014/06/02 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS