我试过阅读文档,但无法得到明确的答案。在单元测试的上下文中,python关键字“is”是否与函数id()相同?
是
id(a) == id(b)
相同
a is b
同样就是
import unittest
unittest.TestCase.assertNotEqual(id(a), id(b))
因此相同
import unittest
unittest.TestCase.assertIsNot(a, b)
我试过阅读文档,但无法得到明确的答案。在单元测试的上下文中,python关键字“is”是否与函数id()相同?
是
id(a) == id(b)
相同
a is b
同样就是
import unittest
unittest.TestCase.assertNotEqual(id(a), id(b))
因此相同
import unittest
unittest.TestCase.assertIsNot(a, b)
是
CPython中的“id”为您提供了所引用对象的内存地址。该地址在同一个python进程中唯一标识一个对象。
因此,
id(a) == id(b)
意思是“的实例A和B的相同内存地址吗?”这相当于 “做a和b是指同一个对象吗?”:
a is b
从 “ID” 的文档字符串:
ID(对象) - >整数
返回的对象的身份。这保证在 同时存在的对象中是唯一的。 (提示:这是对象的内存地址。)
非CPython如PyPy的实现如何? – delnan 2013-03-17 17:08:19
@delnan:至少在PyPy中,'id(a)== id(b)<-> a是b' [(ref)](http://pypy.readthedocs.org/en/latest/cpython_differences.html#object -identity-原语值-的是和-ID)。 – DSM 2013-03-17 17:15:51
@delnan如果id(a)== id(b)在CPython中为真,那么它在PyPy中是真的。相反,情况并非总是如此。试试:(1000000000 + 1)是(1000000000 + 1)。后者在PyPy中总是如此,但在CPython中则不然。 – 2013-03-17 17:26:47
@Makoto在这个问题或其答案中提及'id' ...(我会说没有,但两个答案*提及*它没有解决这个问题)这个问题是老问题,“似乎是为字符串工作”,这个问题是更新颖的“是'是'相当于'id()'比较”。 – delnan 2013-03-17 17:03:17
@delnan:答案包含'is'测试身份和'id()'函数[返回对象的身份]的事实(http://docs.python.org/2/library/functions。 HTML#ID0)。我会说在答案中有足够的提及。 – Makoto 2013-03-17 17:09:06
@Makoto把这两个在一起是问题和答案恕我直言。 – delnan 2013-03-17 17:10:29