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}]
好家伙原来是这么回事啊
python之深浅copy与id的更多相关文章
- Python的深浅copy详解
Python的深浅copy详解 目录 Python的深浅copy详解 一.浅copy的原理 1.1 浅copy的定义 1.2 浅copy的方法 二.深copy的原理 2.1 深copy的定义 2.2 ...
- Python的深浅copy
27.简述Python的深浅拷贝以及应用场景? 深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理 ...
- Python 集合 深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- python集合深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- Python之深浅copy与字符编码
一.深浅copy 1. 首先看赋值运算 l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barr ...
- python之深浅copy
深浅copy 1.赋值运算 a = [1, 2, 3] b = a a.append(666) print(b) #output:[1, 2, 3, 666] 对于赋值运算来说,a与b指向的是同一个内 ...
- 【python】-- 深浅copy、集合
深浅copy 1.数字.字符串的copy: 赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都一样,因为它们永远指向同一个内存地址: >>> import copy & ...
- python基础--深浅copy(重点)
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 深浅copy(重点) 先问问大家,什么是拷贝?拷贝是音译的词,其实他是从copy这个英文单 ...
- day python calss08 深浅copy
一 join (格式: . join) 遍历列表把列表中的每一项用指定符号进行拼接.(把列表转成字符串0 # lst = ["汪峰", "吴君如", &q ...
随机推荐
- linux centos 04
1.python的虚拟环境 1.将当前机器上的解释器作为一个 本地,复制出的很多歌 虚拟解释器 物理机上的 本体解释器 ,什么事也不做 分身1: 解释器1:虚拟环境1 运行django 1 ...
- day53 Pyhton 前端04
内容回顾: 盒子: 内边距:padding,解决内部矛盾,内边距的增加整个盒子也会增加 外边距:margin,解决外部矛盾,当来盒子都有外边距的时候,取两者最大值 边框:border border-c ...
- 机器学习:集成学习:随机森林.GBDT
集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...
- 解了这14道C语言谜题后,所有人都失声了!我来带你深入了解C!
本文展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且有相当的一些例子可能是我们日常工作可能会见得到的.通过这些迷题,希望你能更了解C语言. 如果你不看答案,不知道是否有把握回答各个谜题?让 ...
- Kibana详细入门教程
Kibana详细入门教程 目录 一.Kibana是什么 二.如何安装 三.如何加载自定义索引 四.如何搜索数据 五.如何切换中文 六.如何使用控制台 七.如何使用可视化 八.如何使用仪表盘 一.K ...
- .net core2.2 HealthChecks记录
abp core2.2版时使用 healthChecks使用:安装nuget包:Microsoft.AspNetCore.Diagnostics.HealthChecks startup.cs 中的 ...
- 学python,大概要多久?
都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...
- Java 第三课 数组排序
1.java.util.Arrays.sort(arr) //升序 2.冒泡排序:相邻元素比较 for (int i=0; i <arr.length-1; i++){//内部遍历一次,确定最 ...
- 关于linux epoll的了解
使用select/poll模型假设一台服务器需要支持100w的并发连接,在_FD_SETSIZE为1024时,则至少需要1k个进程 除了进程间的上下文切换的时间消耗外,从内核/用户空间,大量的无脑内存 ...
- Eclipse IDE 使用指南:Git失误提交代码,撤销commit操作
在Eclipse IDE使用Git Commit提交代码时把不需要的文件失误Commit了,比如.settings..classpath..project等文件. 如果是Commit提交代码到本地仓库 ...