Python 2.7を使用していますが、hash()を計算するときにクロージャー変数を無視しているようです。これは意図された動作ですか?==は期待どおりに機能するので、奇妙に思えます。
def foo(x):
def bar():
print x
return bar
>>> foo(1)
<function bar at 0x2aaaaba0e758>
>>> foo(2)
<function bar at 0x2aaaaba0e848>
>>> foo(1) == foo(2)
False
>>> hash(foo(1))
-9223369104822759804
>>> hash(foo(2))
-9223369104822759804
>>> foo(1).__closure__
(<cell at 0x2aaaaba08130: int object at 0x7a97d8>,)
>>> foo(2).__closure__
(<cell at 0x2aaaaba08168: int object at 0x7a97c0>,)
>>>