如果我向Python set对象添加两次整数,Python只会添加一次。你知道吗
a = set()
a.add(5)
a.add(5)
print(a)
>> {5}
但是,在我的应用程序中,我正在尝试向集合中添加协同路由,因为我找不到更好的方法来跟踪哪些协同路由已经在event\u循环中。我对以下行为感到惊讶:
async def foo(something):
await asyncio.sleep(1)
print(something)
a = set()
coro_obj = foo("hi")
a.add(coro_obj)
coro_obj = foo("hi")
a.add(coro_obj)
print(a)
{<coroutine object foo at 0x7f36f8c52888>, <coroutine object foo at 0x7f36f8c52360>}
我不太确定我在这里做了什么。我认为如果协同程序对象不可散列,它就不会被添加到集合中,对吗?所以它是可散列的,对吗?你知道吗
如果它是可散列的,为什么我们会得到两个具有相同方法/参数的不同散列?你知道吗
可以使用字典存储函数和参数集。你知道吗
结果:
集合使用散列来比较对象,因此如果两个对象的
__ hash __()
方法返回相同的值,则两个对象将被视为相等。在你的例子中,它是这样的:正如您所看到的,这两个对象的散列是不同的,这都依赖于内部协同程序散列方法的实现
加法:和obj1.\eq\uuuj(obj2)也应该是真的
相关问题 更多 >
编程相关推荐