Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是python关键字";是";与unittesting上下文中的函数id()相同?_Python_Unit Testing_Keyword - Fatal编程技术网

是python关键字";是";与unittesting上下文中的函数id()相同?

是python关键字";是";与unittesting上下文中的函数id()相同?,python,unit-testing,keyword,Python,Unit Testing,Keyword,我试着读了文件,但没有得到一个明确的答案 是 同 a is b import unittest unittest.TestCase.assertIsNot(a, b) 同样是 import unittest unittest.TestCase.assertNotEqual(id(a), id(b)) 因此与 a is b import unittest unittest.TestCase.assertIsNot(a, b) 是 CPython中的“id”提供所引用对象的内存地址。地址唯

我试着读了文件,但没有得到一个明确的答案

a is b
import unittest
unittest.TestCase.assertIsNot(a, b)
同样是

import unittest
unittest.TestCase.assertNotEqual(id(a), id(b))
因此与

a is b
import unittest
unittest.TestCase.assertIsNot(a, b)

CPython中的“id”提供所引用对象的内存地址。地址唯一地标识同一python进程中的对象

因此,

id(a) == id(b)
是“实例a和实例b的内存地址相同吗?”相当于 “a和b指的是同一个对象吗?”:

从“id”的文档字符串:

id(对象)->整数

返回对象的标识。这保证是独一无二的 同时存在的对象。(提示:它是对象的内存地址。)

CPython中的“id”提供所引用对象的内存地址。地址唯一地标识同一python进程中的对象

因此,

id(a) == id(b)
是“实例a和实例b的内存地址相同吗?”相当于 “a和b指的是同一个对象吗?”:

从“id”的文档字符串:

id(对象)->整数

返回对象的标识。这保证是独一无二的 同时存在的对象。(提示:它是对象的内存地址。)


@Makoto在该问题或其答案中很少提及
id
。。。(我想说没有,但有两个答案没有提到这个问题)这个问题是老生常谈的“
is
似乎适用于字符串”,这个问题更新颖,“is
is
相当于
id()
比较”。@delnan:答案包含了这样一个事实:
is
测试身份,以及
id()
功能。我想说答案中有足够的提及。@Makoto将这两个问题放在一起就是问题和答案IMHO。@Makoto在这个问题或其答案中很少提及
id
。。。(我想说没有,但有两个答案没有提到这个问题)这个问题是老生常谈的“
is
似乎适用于字符串”,这个问题更新颖,“is
is
相当于
id()
比较”。@delnan:答案包含了这样一个事实:
is
测试身份,以及
id()
功能。我想说答案中提到的已经足够多了。@Makoto把这两个放在一起是问答式的IMHO。那么像PyPy这样的非CPython实现呢?@delnan:至少在PyPy中,
id(a)==id(b)a是b
@delnan如果id(a)==id(b)在CPython中是真的,那么在PyPy中也是真的。反过来说,情况并非总是如此。Try:(100000000+1)是(100000000+1)。后者在PyPy中总是正确的,但在CPython中却不是。太好了。我没有问是因为我不知道(我甚至知道为什么会这样),我问是因为答案可以使用这些信息。比较“is”运算符测试对象标识。所以断言NOT(a,b)总是可以替换为assertNotEqual(id(a),id(b))。根据实现内部结构的不同,当涉及到值类型时,您可能会得到不同的结果,因此,当您想要比较值时,请避免使用“is”,因为您不知道它是否适用于其他实现或事件未来的实现。非CPython实现(如pypypy)如何?@delnan:至少在pypypy中,
id(a)==id(b)如果id(a)==id(b)在CPython中为真,那么在PyPy中为真。反过来说,情况并非总是如此。Try:(100000000+1)是(100000000+1)。后者在PyPy中总是正确的,但在CPython中却不是。太好了。我没有问是因为我不知道(我甚至知道为什么会这样),我问是因为答案可以使用这些信息。比较“is”运算符测试对象标识。所以断言NOT(a,b)总是可以替换为assertNotEqual(id(a),id(b))。根据实现内部结构的不同,当涉及到值类型时,您可能会得到不同的结果,因此在您想要比较值时,避免使用“is”,因为您不知道它是否适用于其他实现或事件未来的实现。