为什么is_(a,b)函数比python 2.7.3中的eq(a,b)工作得更快?

Dmi*_*sev 3 python python-2.7

我搜索答案为什么a is None比工作更快a == None.我使用这段代码测量时间:

>>> timeit.timeit("1 is None", number=10000000)
0.4035069934390217
>>> timeit.timeit("1 == None", number=10000000)
0.8190256083633187
Run Code Online (Sandbox Code Playgroud)

该文件说,a is b具有功能equialent is_(a, b)a == b具有同等功能eq(a, b).那么,为什么is_功能更快eq

我读了一些is_()只比较对象标识符的文章,并进行了eq()"深度比较".但我在文档中找不到这些信息.这些信息是否正确?我可以在哪里阅读更多相关信息?

Mar*_*ers 9

对identity(is)的测试就像简单的指针比较(两个值是同一个对象).

对平等的测试需要做更多的工作; 例如,对于列表,它确实需要测试两个列表中每个元素的相等性,直到某些东西测试为相等为负,或者测试了最短列表中的所有元素.

请注意,两个运算符的测试结果完全不同:

>>> lsta = []
>>> lstb = lsta
>>> lsta is listb
True
>>> lstc = []
>>> lsta is listc
False
>>> lsta == listc
True
Run Code Online (Sandbox Code Playgroud)

仅仅因为两个对象相等并不意味着它们是同一个对象; is测试后者.