Question: I'm asking this because I know that the pythonic way to check whether a list is empty or not is the following: 

```
my_list = []
if not my_list:
    print "computer says no"
else:
    # my_list isn't empty
    print "computer says yes"

```

will print `computer says no`, etc. So this leads me to identify `[]` with `False` truth-values; however, if I try to compare [] and False "directly", I obtain the following: 

```
>>> my_list == False
False
>>> my_list is False
False
>>> [] == False
False

```

etc... 

What's going on here? I feel like I'm missing something really obvious.

Answer: 
Built-in types in Python have a truth value which allows you to test them for truthfulness. See *[Truth Value Testing](http://docs.python.org/library/stdtypes.html#truth-value-testing)*.

This is different than saying `object == False` which is doing an actual value test (equality test). It is using the objects `__eq__()` method to determine if their values are equal.
In your example, the not operator is causing your list to be converted to a boolean. Try this:

```
>>> not []
True

>>> not [1]
False

```

"is" and "==" don't do that conversion.