Python セット オブジェクトに整数を 2 回追加すると、Python はそれを 1 回だけ追加します。
a = set()
a.add(5)
a.add(5)
print(a)
>> {5}
ただし、私のアプリでは、どのコルーチンが既に event_loop にあるかを追跡するより良い方法が見つからないため、コルーチンをセットに追加しようとしています。次の行動に驚きました。
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>}
ここで何をしたかよくわかりません。コルーチン オブジェクトがハッシュ可能でない場合、セットに追加されないと考えるのは正しいでしょうか? ハッシュ可能ですよね?
では、ハッシュ可能な場合、同じメソッド/引数で 2 つの異なるハッシュを取得するのはなぜでしょうか?