当前位置: 首页 > 面试题库 >

`is`运算符是否在Python中使用__magic__方法?

左丘宜年
2023-03-14
问题内容

将是运营商身份使用测试。

我想知道,如果is运营商和id()函数调用任何__magic__方法,方式==调用__eq__

我有一些有趣的结帐__hash__

class Foo(object):
    def __hash__(self):
        return random.randint(0, 2 ** 32)

a = Foo()
b = {}
for i in range(5000):
    b[a] = i

考虑一下dictb和…的价值b[a]

的每个后续查找d[a]都是aKeyError或随机整数。

但随着对特殊方法的文档状态

[ x 的默认实现__hash__()返回id(x)。

因此,有 只是周围的其他方式两者之间的关系,但。

我在这里和这里已经看到了许多问题)已经帮助了许多困惑的人,但是我找不到这个问题的答案。is``id


问题答案:

不,is是直接指针比较,id只是将转换为的对象地址返回long

来自ceval.c

case PyCmp_IS:
    res = (v == w);
    break;
case PyCmp_IS_NOT:
    res = (v != w);
    break;

vw这里简单PyObject *

来自bltinmodule.c

static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
    return PyLong_FromVoidPtr(v);
}

PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");


 类似资料:
  • 问题内容: 操作员如何确定两个对象是否相同?它是如何工作的?我找不到记录。 问题答案: 从文档中: 每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就永远不会改变。您可能会认为它是对象在内存中的地址。“ is”运算符比较两个对象的身份;id()函数返回一个表示其身份的整数(当前实现为其地址)。 这似乎表明它在比较参数的内存地址,尽管它说“您可能将其视为对象在内存中的地址”这一事实可能

  • 问题内容: 该运营商不匹配变量的值,但这些实例本身。 到底是什么意思 我声明了两个变量,并在两个变量中分配了相同的值,但是当我使用运算符时,它返回。 我需要澄清。这是我的代码。 问题答案: 您误解了操作员的测试内容。它测试两个变量是否指向同一个对象,而不是两个变量具有相同的值。 从操作员文档中: 运算符is和is not对象标识测试:当且仅当和y是相同对象时,才为。 改用运算符: 打印True。x

  • 问题内容: 我注意到我可以使用运算符比较所有本机数据类型(整数,字符串,布尔值,浮点数等),还可以比较包含本机数据类型的列表,元组,集合和字典。在这些情况下,操作员将检查两个对象是否相等。但是在某些其他情况下(试图比较我创建的类的实例),该运算符只是检查两个变量是否引用同一对象(因此在这些情况下,该运算符等效于该运算符) 我的问题是:什么时候操作员不只是比较身份? 编辑:我正在使用Python 3

  • 问题内容: 我对对象使用开关盒有疑问: 例如:我的问题可以用Java复制: 如何使用实施? 问题答案: 这是子类型多态性有帮助的典型方案。请执行下列操作 然后,你可以简单的调用上。 如果你不能随意更改,和,则可以应用访问者模式来实现相同目的。

  • 问题内容: 这是我代表三角形的自定义类。我试着写代码,查看是否,以及大于0,这将意味着我有角,角,角。 在下面,您将看到检查A和B的代码,但是当我使用它时,它可以正常工作。我相信我没有正确使用。有任何想法吗?这是我的称呼方式: 问题答案: 您应该写: “ ”是按位运算符,不适合布尔运算。在Python中,“ ”的等效项是“和”。 检查所需内容的一种较短方法是使用“ in”运算符: 您可以使用“ i

  • 问题内容: 我最近了解到,“%”符号用于计算Python中整数的余数。但是我无法确定是否还有其他运算符或方法来计算Python中的百分比。 就像使用“ /”会给您商数一样,如果仅对整数之一使用浮点数,它实际上会像传统除法一样为您提供答案。那么有没有一种方法可以计算出百分比呢? 问题答案: 在Python中没有这样的运算符,但是自己实现是很简单的。在计算实践中,百分比几乎不像模数有用,所以我认为没有