Difference between 'is' and '=='
Joel Hedlund
joel.hedlund at gmail.com
Mon Mar 27 07:52:46 EST 2006
> "is" is like id(obj1) == id(obj2)
<snip>
> (Think of id as memory adresses.)
Which means that "is" comparisons in general will be faster than ==
comparisons. According to PEP8 (python programming style guidelines) you should
use 'is' when comparing to singletons like None. I take this to also include
constants and such. That allows us to take short cuts through known terrain,
such as in the massive_computations function below:
--------------------------------------------------------------
import time
class LotsOfData(object):
def __init__(self, *data):
self.data = data
def __eq__(self, o):
time.sleep(2) # time consuming computations...
return self.data == o.data
KNOWN_DATA = LotsOfData(1,2)
same_data = KNOWN_DATA
equal_data = LotsOfData(1,2)
other_data = LotsOfData(2,3)
def massive_computations(data = KNOWN_DATA):
if data is KNOWN_DATA:
return "very quick answer"
elif data == KNOWN_DATA:
return "quick answer"
else:
time.sleep(10) # time consuming computations...
return "slow answer"
print "Here we go!"
print massive_computations()
print massive_computations(same_data)
print massive_computations(equal_data)
print massive_computations(other_data)
print "Done."
--------------------------------------------------------------
Cheers,
Joel
More information about the Python-list
mailing list