1

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 つの異なるハッシュを取得するのはなぜでしょうか?

4

2 に答える 2