转载地址: https://blog.csdn.net/Mluka/article/details/51076786

在python核心编程第四章中,P69在优化下面这段代码时提出了:对象值比较VS对象身份比较

在运行时期,只有一个类型对象来表示整形类型。也就是说type(0),type(42),type(-100)都是同一个对象<type 'int'>

如果他们是同一个对象,我们为什么还要浪费时间去获得并比较他们的值呢?所以比较对象本身是一个更好的方案。

所以将

  1. if type(num) == types.IntType

改进为

  1. if type(num) is types.IntType

一开始没看懂这句话的意思,后来做了如下尝试,大概了解了。

type(0)是'int',type(1)也是'int'。所以他们的id都是506039200L,所以我们在比较的时候就不必去获取他们的值value,而是直接比较他们的身份即id就好了。

所以减少了获取值的这一过程,使得程序得到了优化。

is判断的是a对象是否就是b对象,是通过id来判断的。

==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。

我们可以用如下代码来验证一下

  1. import time
  2. class A(object):
  3. pass
  4. a=A()
  5. list=range(50000000)
  6. list.append(a)
  7. t=time.time()
  8. for i in list:
  9. if type(i)==A:
  10. print "done 1"
  11. print time.time()-t
  12. t=time.time()
  13. for i in list:
  14. if type(i) is A:
  15. print "done 2"
  16. print time.time()-t

效果还是很明显的。

补充一下

简而言之:在判断两个对象是否为同一个类型时,无论是使用“==”进行对象值比较,还是使用 is关键字直接比较对象的身份,结果都是一样的,只是使用is关键字进行身份比较,会优化程序性能

python核心编程中的对象值比较VS对象身份比较(转载)的更多相关文章

  1. python核心编程中网络爬虫的例子

    #!/usr/bin/env python import cStringIO # import formatter # from htmllib import HTMLParser # We use ...

  2. Python核心编程-描述符

    python中,什么描述符.描述符就是实现了"__get__"."__set__"或"__delete__" 方法中至少一个的对象.什么是非 ...

  3. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  4. 学习《Python核心编程》做一下知识点提要,方便复习(一)

    学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿p ...

  5. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  6. Python核心编程第二版(中文).pdf 目录整理

    python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源  :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...

  7. Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器

      生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值:在下一次调用该函数执行时,程 ...

  8. python核心编程--笔记(不定时跟新)(转)

    的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   ...

  9. python核心编程笔记(转)

    解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗 ...

随机推荐

  1. noip模拟赛 正方形

    题目描述在一个10000*10000的二维平面上,有n颗糖果.LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果!事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖果.并 ...

  2. eventlet学习笔记

    eventlet学习笔记 标签(空格分隔): python eventlet eventlet是一个用来处理和网络相关的python库函数,且可以通过协程(coroutines)实现并发.在event ...

  3. Java 和JS Base64加密

    项目在登录.注册等场景实现时,经常会用到用户信息前端加密,然后项目后端二次解密,避免信息直接在浏览器上以明文显示. 本文主要介绍了base64加密的方式处理代码,不支持中文 源码如下: base64. ...

  4. LINUX 内核基础

    http://blog.csdn.net/acs713/article/details/42836335

  5. Oracle Internals 相关站点

    http://oracle-internals.com/blog/links/ http://coll15.mapyourshow.com/6_0/sessions/session-details.c ...

  6. sqlyog

    https://github.com/webyog/sqlyog-community/wiki/Downloads

  7. [csdn markdown]使用摘记一源码高亮及图片上传和链接

    本文主要内容是体验csdn markdown的代码块高亮显示和图片链接及上传. 图片上传 上边这是标题行.仅仅须要使用一个#就能够表示.几个表示是几级标题 图片上传 本地图片上传控件 本地图片上传方式 ...

  8. spring与springboot中,如何在static方法里使用自动注入的属性

    第一步:写注解@Component 使当前类成为一个bean对象.(@Controller,@service都行) 第二步:写个static的变量 第三步:写个@PostConstruct注解注解注释 ...

  9. hdu4738Caocao's Bridges

    什么?有人要炸我的桥?!D飞他(心疼周瑜大都督) 这个就是求割边/桥了. #include<cstdio> #include<iostream> #include<cst ...

  10. Android Calendar的运用

    import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; impo ...