您的位置:首页 > 编程语言 > Python开发

python核心编程中的对象值比较VS对象身份比较

2016-04-06 17:28 441 查看
在python核心编程第四章中,P69在优化下面这段代码时提出了:对象值比较VS对象身份比较

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

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

所以将

if type(num) == types.IntType

改进为

if type(num) is types.IntType


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



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

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

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

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

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

import time
class A(object):
pass
a=A()
list=range(50000000)
list.append(a)

t=time.time()
for i in list:
if type(i)==A:
print "done 1"
print time.time()-t

t=time.time()
for i in list:
if type(i) is A:
print "done 2"
print time.time()-t




效果还是很明显的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 优化