I think the part you missed is what "is" keyword actually does.
"is" tests references, or "identity" of an object. {} is an empty dictionary, expression "{} is {}" creates two empty dictionary. Their values are "equal" but their identities are not because those two dictionaries reside in different locations in memory as dictionary is an object which is created dynamically.
"False is False" works because it is a constant, so both of those values refer to the same block of memory. Since it makes no sense for Python to allocate different memory blocks every time it sees "False" in the code.