转载地址: 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. L - 贪心 基础

    Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem. The shor ...

  2. 可拖动的div——demo

    可拖动的div——demo 我们经常会遇到这样的注册界面 我们以前经常可以遇到这种需要注册的网站,如上图: 上图有一个特点,即是上述注册框其实是一个div,同时可以拖动,以下做一个简单的实例,就可以实 ...

  3. 记一次ruby的安装

    1,下载rubyinstall 安装包及devkit包 登陆网站 :http://rubyinstaller.org/downloads/ 安装rubyinstall包时添加到环境变量 2,安装完in ...

  4. 整理100道 .net面试题

    前段时间,我在准备面试的时搜到的一套 net开发人员面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需. 1. .NET和C#有什么区别 答:.NET一般指 ...

  5. Linuxpassword破解及grub加密演示

    password破解及grub加密演示 so easy,不可不会! 原理: 通过进入单用户模式(单用户模式也即是仅仅有一个用户能够訪问资源的状态,且单用户模式就是系统处于最原始的状态,大部分服务还未开 ...

  6. Unreal Engine 4 Camera Lag(摄影机延迟)

    以官方的Third Person Template为样例,Character蓝图中的USpringArmComponent就实现了摄影机和场景碰撞和交互等大部分的功能了. 要实现摄影机延时,仅仅须要改 ...

  7. 571B. Minimization(Codeforces Round #317)

    B. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  8. myeclipse视图布局恢复

    使用Windows 菜单下的 Reset Perspective

  9. Building a Space Station(bfs)

    http://poj.org/problem?id=2031 题意:给出n个球的圆心坐标x,y,z, 半径r,若任意两球不相交,则在两球间建桥.问需建桥的最短距离是多少. 思路:建图,以两球间相差的距 ...

  10. 昂贵的聘礼(Dijkstra)

    http://poj.org/problem?id=1062 每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点 ...