I am relatively new to Python and don't understand the following behavior:
Why does the statement
[] == False 
evaluate to false, eventhough an empty list is falsy?
Here are more examples - in many other cases it seems that the empty list does behave in a falsy way, just not in [] == False...
>>> 0 == False                # what I'd expect
True
>>> not []                    # what I'd expect
True
>>> bool([])                  # what I'd expect
False
>>> [] == True                # what I'd expect
False
>>> [] == False               # unexpected
False
>>> bool([]) == False         # why does it evaluate to True again now?
True
>>> ([]) == (bool([]))        # unexpected
False
>>> (not []) == (not bool([]) # apparently adding 'not' makes it behave as expected again - why?
True
Can somebody please explain this to me? How are these statements internally evaluted? 
I have a feeling it might be related to chaining comparisons (see e.g. here), but cannot really understand if that's correct and why.