The `==` operator in Python is extremely fascinating, because Python is a loosely typed language. This means there exists a notion of equality not only between numbers, but also between numbers and strings, and strings and lists, and lists and dictionaries.

The `==` operator always returns `True` or `False`.

## Equality Operations: Common Examples

Let's first talk of some common examples:

``````>>> 1 == 1 # integer equality
True
>>> 1 == 2 # integer inequality
False
>>> 1.0 == 1.0 # float inequality
True
>>> {} == {} # dictionary equality
True
>>> 1 == 1.0 # floats and integers can be compared! Equality
True
>>> 1 == "1" # string integer inequality
False
>>> "1" == "1" # string equality
True
>>> "1" == "2" # string inequality
False
>>> False == None
False
>>>  ==  # list equality
True
``````

And so on.

## Equality Operations: Uncommon Examples

What if, instead, we started to compare Functions with Lists?

``````>>> f = lambda x: x+1
>>> f == 
False
``````

As you could have guessed, this returns false!

Now, let's turn this up a notch

``````>>> f = lambda x: x+1
>>> g = lambda x: x+1
>>> f == g
False
``````

Wait, what? Why is this also returning false? They are the same function, aren't they? Before we address this, we have to make clear a quick aside.

### Aside: Everything is An Object

A question you perhaps never asked yourself: why can everything be compared in Python? Why can you check if a list is equal to a dictionary, or a dictionary to a function? As you'll see in later classes, this is not the case in other languages.

This is because, under the hood, everything in Python is an Object.