python中的3个常见操作符is、id、==,三个的使用方法和应用场景不近相同,有各自适合的应用场景

is:用于比较两个对应是否是同一个引用
==:用于比较两个之是否相同
id:用于获取对象的内存地址

id(5)
1492768624
a = 4
b = 4
a == b
True
a is b
True
a = 257
b = 257
a == b
True
a is b
False

两个人数值对象都是4的时候他们的值相等,他们的引用也相同,但是当两个对象值为257的时候,他们的引用就不相同了,为什么出现这种原因?
这是因为python的内存管理机制,对于数值而言,在[-5,257)之间的数值对象他们共用一个对象,即都指向一个内存地址。

a = 4
b = 4
id(a)
1492768608
id(b)
1492768608

可见在内存中的地址是一样的,一个对象,[-5,257)之间的数值是已经建好的,即使我们所谓的创建,对于程序而言也不是创建只不过增加了一个引用。
深拷贝、浅拷贝
深拷贝是在内存中在创建一个相同的对象,而浅拷贝是给对象增加一个引用,用一个比喻来形容:一个txt文本,在桌面创建快捷方式是浅拷贝,复制这个txt文件是深拷贝,那么删除一个快捷方式不会影响到原文件,但是删除一个原文件的复制文件,那么就是真的删除了一个文件。
python中copy模块提供了对象拷贝的深拷贝和浅拷贝模式,分别是copy.deepcopy()、copy.copy()。

a = 'dsasdsd'
b = copy.copy(a)
c = copy.deepcopy(a)
id(a)
80379424
id(b)
80379424
id(c)
80379424

上面案例中创建了一个字符串对象a,通过浅拷贝和深拷贝分别创建了另两个对象bc,那么他们的内存地址为什么是一样的。
这是受益于python的共享机制,对于不可变的单个字符、不可变字符串是共享对象,相同的对象是指向一个内存地址。
更对机制等待各位深入。

python中is、id、==与浅拷贝和深拷贝相关推荐

  1. python中的引用、浅拷贝和深拷贝

    在python中,有一句话:"一切皆为对象,一切皆为对象的引用",所以 只要记住这句话就很容易清楚python中的引用.浅拷贝和深拷贝了. 1. 引用 python中的引用是经常使 ...

  2. Python中的对象引用、浅拷贝与深拷贝

    最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用.赋值.浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念. 在Python的设计 ...

  3. python中的复制、浅拷贝和深拷贝的区别

    (1)直接复制:传递对象的引用(该引用指向变量的存储地址),若原始值改变,则被赋值的b也会做出相同的改变. b = alist (2)浅拷贝:使用copy库中的copy函数,只拷贝父对象,不拷贝子对象 ...

  4. python中的赋值、浅拷贝和深拷贝

    赋值 浅拷贝 深拷贝 拷贝引用,不拷贝对象 拷贝对象,不拷贝子对象(拷贝对子对象的引用) 拷贝对象,包括子对象 原始数据改变,拷贝数据改变 原始数据改变,子对象改变 原始数据改变,拷贝对象不改变 1. ...

  5. python中copy模块的使用,深拷贝和浅拷贝

    python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...

  6. 下列可作为python变量名的是1name_在Python中可以使用 id 作为变量名,尽管不建议这样做。...

    在Python中可以使用 id 作为变量名,尽管不建议这样做. 答:正确 下列四环素类药物不良反应中,哪一个是错误的 答:抑制骨髓造血 There ___ no need to feel homesi ...

  7. python中赋值不正确的_python中关于赋值、浅拷贝与深拷贝的问题

    Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...

  8. Python中copy,deepcopy,浅拷贝(“=”)和深拷贝(“copy.deepcopy()”)

    python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式.其中浅拷贝由"="完成.而深拷贝由copy模块中deepcopy()函数担任. 浅拷贝和深拷 ...

  9. Python(IT峰)笔记06-数据类型详解:列表,列表的定义,列表的基本运算,列表中的切片,列表中的相关函数,浅拷贝,深拷贝,列表推导式

    1.列表的定义 中括号进行定义 list函数定义 使用逗号分割 列表中的元素可以是任意类型,尽管这样很少用 lists=list() lists.append('zhangsan') lists.ap ...

  10. python—类和对象之浅拷贝和深拷贝详细讲解

    一.变量的赋值操作 定义:只是形成2个变量,实际上还是指向同一个对象 代码如下: 内存示意图: 将创建CPU类的实例对象赋值给cpu1进行储存,所以cpu1的id为0212, 然后将cpu1赋值给cp ...

最新文章

  1. 英国计算机系学生黑掉校长邮箱:倒闭学校,取消考试!
  2. 奥鹏C语言专科在线作业答案,奥鹏13春电子科大《C语言(专科)》在线作业3答案...
  3. Windows 下 MySQL-python 的安装
  4. Qt:OpenCV—Q图像处理基本操作(Code)
  5. 模板原理和操作数据类的观点【艰难的一天,慢慢的会过去的】
  6. HttpClient api-连接池
  7. 小技巧来助阵 玩转Chrome浏览器
  8. 2的次幂表示【递归算法训练】
  9. 网络协议osi模型_网络协议|OSI模型第二层数据链路层
  10. Fedora 8中完全开启compiz-fusion特效
  11. Android Studio Design界面不显示layout控件的解决方法
  12. sas中一些小的选项的含义
  13. 【java学习之路】(javaWeb篇)002.CSS
  14. 基于PHP+Web+Mysql的在线问卷调查系统
  15. elasticsearch 如何清理过期的数据
  16. excel转置怎么操作_EXCEL/WPS如何快速将一行转置成一列,一列转置成一行?
  17. java全角转半角,半角转全角的方法
  18. ApacheCN 公众号文章汇总 2019.9
  19. Rosetta stone安装过程中遇到的问题和解决方案
  20. 上海之行,我是来要饭的

热门文章

  1. 递归和对面对象编程初步
  2. 《大道至简》阅读笔记02
  3. hive与hbase数据类型对应关系
  4. 只有想不到 没有做不到(防疲劳软件)
  5. Enterprise Library 4.1学习笔记3----安全应用程序块
  6. SpringBoot配置mybatis多数据源(包含单数据源)最终解决方案,带源码
  7. 软件测试工程师面试必备技能
  8. python调用usb摄像头黑屏_ORB-SLAM2编译安装和USB摄像头例程运行
  9. docker hub push_Docker系列-(2) 镜像制作与发布
  10. python一次性输入多个数_python如何一次性输入多个数