python之深浅copy与id
我们都知道 所谓变量就是就是在空间中开辟一块内存空间。来存放东西的
学过c语言的都知道而数组也是有内存地址的
我们如何来查看内存地址呢?id()这函数就来了
x = 5 print(id(x))
如此一来我们就可以查看x的内存地址了他的内存地址是
1940307088
首先我们来看一个现象
我们把数组赋值给一个变量a 然后在把a赋值给b 在来改变a的值 看看b 是否会发生变化呢?
a = [1,2,3] b = a a[0] = 11 print(b)
得出的结果是
[11, 2, 3]
很显然发生了变化,这是什么原因造成的呢?最好的办法就是查一下他们的id
print(id(a) == id(b))
结果是 True
很显然他们指向了同一块内存地址, 为什么会出现这种情况呢?我们在学c语言的是时候啊 知道数组的地址就是数组的首地址,所以我们可以直接赋值,
但是内存地址没有发生改变。为了解决这一情况,我们可以采用copy的方法来将数据拷贝出来
首先 我们import 出copy的库来
import copy a = [1,2,3] b = copy.copy(a) a[0] = 11 print(b) print(id(a) == id(b))
我们看一下结果
[1, 2, 3] False
可以看出我们地址不相同了 现在改变数组里面的元素也与b无关了
哪我们升级一下改变一下难度 我们把a 变成
a = [1,2,[1,2,3]]
import copy a = [1,2,[1,2,3]] b = copy.copy(a) a[2][0] = 11 print(b)
结果是
[1, 2, [11, 2, 3]]
我擦居然还是变了,这是怎么回事?你发现只能copy第一层 于是你不甘心你又加了字典
import copy a = [1,2,[1,2,3],{'wocao':123456}] b = copy.copy(a) a[3]['wocao'] = 11 print(b)
结果是
[1, 2, [1, 2, 3], {'wocao': 11}]
于是你恍然大悟啊。。。。原来copy只能浅浅的copy一层啊!!!
还好你上课听讲,听见了老师说了深深的copy,于是你又拿出来试试
import copy a = [1,2,[1,2,3],{'wocao':123456}] b = copy.deepcopy(a) a[3]['wocao'] = 11 a[2][1] = 11 print(b)
得出来
[1, 2, [1, 2, 3], {'wocao': 123456}]
好家伙原来是这么回事啊
转载于:https://www.cnblogs.com/BookMiki/p/10192870.html
python之深浅copy与id相关推荐
- python之深浅copy
python之深浅copy 文章目录 python之深浅copy 引入 1.为什么要使用深浅拷贝 一.赋值运算 1.赋值运算原理 2.示例 3.总结 二.拷贝 三.浅拷贝 什么是浅拷贝? 1.浅拷贝原 ...
- day python calss08 深浅copy
一 join (格式: . join) 遍历列表把列表中的每一项用指定符号进行拼接.(把列表转成字符串0 # lst = ["汪峰", "吴君如", &q ...
- Python基础三--字典,集合,编码,深浅copy,元祖、文件操作
字典 dict数据类型划分:可变数据类型,不可变数据类型不可变数据类型: 元组,bool值,int,str 可哈希可变数据类型: list,dict,set 不可哈希 dict key :必须是不可变 ...
- python怎么设置颜色深浅变化_Python赋值、深浅copy
Python赋值.深浅copy assignment: 在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同,如下所示 a = [1, 2, 'hello', ['python', ...
- python 的内存回收,及深浅Copy详解
一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...
- Python 深浅copy 和文件操作
深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...
- [转载] python创建集合、计算a|b_python之路(集合,深浅copy,基础数据补充)
参考链接: Python 集合set | symmetric_difference 一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = ...
- 乐学python怎么样_铁乐学Python_day07_集合and浅谈深浅copy
1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...
- Python深浅copy
在python里对对象进行拷贝有三个,即赋值,深拷贝,浅拷贝.而对象又分为两种,一种是不可变对象(字符串.元组.数字 ),一种是可变对象(列表.字典).而深浅拷贝有三种情况: 拷贝的是不可变对象,对于 ...
- python集合数据对象_python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象...
在基础数据类型中可能遇到的坑: 元组: tuple1=(1) 的数据类型是int , tuple2=('alex')的数据类型是str 等 tuple1=(1,) 和 tuple2的数据类型是 tup ...
最新文章
- .NET(C#):使用Win32Exception类型处理Win32错误代码
- 欧几里得最大公约数算法
- 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
- 如何成为一位牛逼的高手
- SCVMM2012 SP1 之P2V转换
- ❤️ 爆赞,基础又全面的Linux命令合集!学都学不完...【汇总】
- ORB_SLAM2探秘 第二章
- python将视频一帧一帧_python 用opencv接口把视频逐帧转化为图片
- 【正则】详解python正则表达式之re.group()用法
- jquery.printarea.js 局部打印去掉页眉页脚
- 强智教务php,强智科技教务处模拟登录
- Laravel Scout 包在 Elasticsearch 中的使用记录
- 用eclipse读spark源码
- Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”
- 蓝牙耳机哪款好?佩戴舒适的无线蓝牙耳机推荐
- 笔记本无线网老是掉线的解决方法
- 阿里的数据分析技术有多强?从优酷的大数据架构中,我学到了这些
- SPSS数据统计分析前准备【002期】
- 未来 Android 开发的从业方向
- python测试用例发送邮件用谷歌浏览器的方式