我们都知道 所谓变量就是就是在空间中开辟一块内存空间。来存放东西的

学过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相关推荐

  1. python之深浅copy

    python之深浅copy 文章目录 python之深浅copy 引入 1.为什么要使用深浅拷贝 一.赋值运算 1.赋值运算原理 2.示例 3.总结 二.拷贝 三.浅拷贝 什么是浅拷贝? 1.浅拷贝原 ...

  2. day python calss08 深浅copy

    一  join (格式:   . join) 遍历列表把列表中的每一项用指定符号进行拼接.(把列表转成字符串0 # lst = ["汪峰", "吴君如", &q ...

  3. Python基础三--字典,集合,编码,深浅copy,元祖、文件操作

    字典 dict数据类型划分:可变数据类型,不可变数据类型不可变数据类型: 元组,bool值,int,str 可哈希可变数据类型: list,dict,set 不可哈希 dict key :必须是不可变 ...

  4. python怎么设置颜色深浅变化_Python赋值、深浅copy

    Python赋值.深浅copy assignment: 在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同,如下所示 a = [1, 2, 'hello', ['python', ...

  5. python 的内存回收,及深浅Copy详解

    一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...

  6. Python 深浅copy 和文件操作

    深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...

  7. [转载] python创建集合、计算a|b_python之路(集合,深浅copy,基础数据补充)

    参考链接: Python 集合set | symmetric_difference 一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = ...

  8. 乐学python怎么样_铁乐学Python_day07_集合and浅谈深浅copy

    1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...

  9. Python深浅copy

    在python里对对象进行拷贝有三个,即赋值,深拷贝,浅拷贝.而对象又分为两种,一种是不可变对象(字符串.元组.数字 ),一种是可变对象(列表.字典).而深浅拷贝有三种情况: 拷贝的是不可变对象,对于 ...

  10. python集合数据对象_python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象...

    在基础数据类型中可能遇到的坑: 元组: tuple1=(1) 的数据类型是int , tuple2=('alex')的数据类型是str 等 tuple1=(1,) 和 tuple2的数据类型是 tup ...

最新文章

  1. .NET(C#):使用Win32Exception类型处理Win32错误代码
  2. 欧几里得最大公约数算法
  3. 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
  4. 如何成为一位牛逼的高手
  5. SCVMM2012 SP1 之P2V转换
  6. ❤️ 爆赞,基础又全面的Linux命令合集!学都学不完...【汇总】
  7. ORB_SLAM2探秘 第二章
  8. python将视频一帧一帧_python 用opencv接口把视频逐帧转化为图片
  9. 【正则】详解python正则表达式之re.group()用法
  10. jquery.printarea.js 局部打印去掉页眉页脚
  11. 强智教务php,强智科技教务处模拟登录
  12. Laravel Scout 包在 Elasticsearch 中的使用记录
  13. 用eclipse读spark源码
  14. Oracle创建存储过程时出现“警告: 创建的过程带有编译错误。”
  15. 蓝牙耳机哪款好?佩戴舒适的无线蓝牙耳机推荐
  16. 笔记本无线网老是掉线的解决方法
  17. 阿里的数据分析技术有多强?从优酷的大数据架构中,我学到了这些
  18. SPSS数据统计分析前准备【002期】
  19. 未来 Android 开发的从业方向
  20. python测试用例发送邮件用谷歌浏览器的方式

热门文章

  1. 操作系统面试基本概念
  2. d2rq java,知识图谱学习与实践(6)——从结构化数据进行知识抽取(D2RQ介绍)...
  3. python统计数据库中每个数的个数,如何统计每个数据库中每个集合中的文档数?...
  4. scala json处理入门
  5. clickhouse kafka引擎入门
  6. Cmake构建_设置debug与release输出路径
  7. ubtunu开机黑屏无桌面解决方法
  8. 特征检测和特征匹配方法汇总
  9. 监听input框值得改变
  10. 蔚来汽车为国人长脸,牌照和品牌将是今后的两大重点