th 174 - Why [] == False is false but If Not [] succeeds?

Why [] == False is false but If Not [] succeeds?

Posted on
th?q=Why Does - Why [] == False is false but If Not [] succeeds?

Have you ever come across the statement Why [] == False is false but If Not [] succeeds? and wondered what it means? Well, you are in the right place. In the world of programming, understanding the difference between equality and truthiness can be crucial, and this statement highlights this difference perfectly.

At first glance, it might seem that an empty list or array would be equal to False as they both represent the absence of data. However, in Python, these two are not considered equal. The reason is that when checking for equality, Python looks at the value of the variables, whereas when determining truthiness, Python looks at the existence of a value.

So, why does If Not [] succeed when Why [] == False fails? The answer lies in the truthiness of an empty list. When using If Not, Python checks if the value is empty, and if it is, it returns True. In contrast, when comparing [] to False, Python checks the value of [] which is empty, and False’s value, which is 0, resulting in a false statement.

Understanding the subtle differences between equality and truthiness can save you a lot of frustration when programming. So, the next time you come across the statement Why [] == False is false but If Not [] succeeds? you’ll know why they are not the same, and how to avoid making similar mistakes in your code.

th?q=Why%20Does%20%22%5B%5D%20%3D%3D%20False%22%20Evaluate%20To%20False%20When%20%22If%20Not%20%5B%5D%22%20Succeeds%3F - Why [] == False is false but If Not [] succeeds?
“Why Does “[] == False” Evaluate To False When “If Not []” Succeeds?” ~ bbaz


In Python, there are some confusing aspects that may cause confusion among developers. One of these is the comparison between the empty list [] and the boolean value False. While it is reasonable to expect these two values to be equivalent, the comparison [] == False actually returns False. In this blog post, we’ll discuss why that is and how the behavior can be explained. Additionally, we’ll look at the not operator and how it relates to this issue.


Before we dive into the reasons why [] == False produces an unexpected result, let’s recap some background information. Firstly, in Python, every object can be evaluated to a boolean value – either True or False. This is useful for control structures such as if statements or while loops. When a value is evaluated as a boolean, all objects in Python are considered truthy by default, except for the following:

  • False
  • None
  • Zero of any numeric type: 0, 0.0, 0j, etc.
  • Empty sequences and collections: '', (), [], {}, set(), range(0)

This means that when we evaluate the empty list [] as a boolean, it should return False.

Why [] == False is False?

Given that [] evaluates to False, it would make sense if the comparison [] == False returned True. However, when we actually try this in Python, the result is False. So what’s going on here?

The answer lies in the fact that [] and False are not the same type of object. In Python, the empty list is a sequence data type, whereas False is a boolean value. Since these two objects are of different types, they cannot be compared directly using the == operator.

When we use the == operator to compare two objects of different types, Python will always return False. Therefore, [] == False evaluates to False.

How if not [] succeeds?

Now let’s take a look at how the not operator behaves in relation to []. The expression not [] should logically evaluate to True, since an empty list is considered falsy in Python. Let’s see if this holds up:

>>> not []True

As expected, not [] returns True. But why does this work when [] == False fails?

The difference here is that we’re not comparing types. Instead, we’re using the not operator to reverse the truthiness of []. In other words, not [] is equivalent to bool([]) == False, where bool([]) will evaluate to False.

By using the not operator, we effectively flip the boolean value of [], so that it becomes True.

A table comparison: [] vs False

To summarize the differences between [] and False, let’s take a look at a comparison table:

Value Type Boolean Value
[] List False
False Boolean False


Although it may seem surprising that [] == False returns False, it makes sense when we consider that these two objects are not of the same type. When we compare objects of different types using the == operator, Python will always return False.

The not operator, however, allows us to reverse the truthiness of [], so that it can be evaluated as True. This is because we’re not comparing objects of different types, but rather using a logical operator to invert the boolean value of an object.

Understanding these subtleties in Python can help prevent confusion and lead to clearer, more concise code.

In conclusion, we have learned that the expression Why [] == False is false in Python. This is because, when we compare an empty list with a boolean value, Python always returns False. However, if we use the not operator before the list, the result will be True. This is because an empty list is considered to be falsy in Python, so applying the not operator to it yields a true value.

This behavior may seem counterintuitive at first, but it follows the rules of Python’s boolean logic. It is important to understand how these operators work, especially when working with complex conditions and conditional statements in your code. Knowing why certain expressions evaluate to true or false can help you write more efficient and effective programs.

I hope this article has been informative and helpful in understanding the puzzling comparison between an empty list and a boolean value in Python. Keep exploring and experimenting with Python’s various features and functionalities, and who knows what other interesting insights you might uncover along the way!

People also ask about Why [] == False is false but If Not [] succeeds?

  • Why does the comparison of an empty list to False return False?
  • How can an empty list evaluate to True with the not operator?
  • What is the difference between equality and truthiness in Python?


  1. When Python compares a list to a boolean value, it checks if the list is empty or not. An empty list is considered as False, while a non-empty list is considered as True. Therefore, [] == False evaluates to False because an empty list and False are not equal.
  2. The not operator in Python returns the opposite boolean value of its operand. When applied to an empty list, it returns True because an empty list is considered as False. Therefore, not [] succeeds because it returns True.
  3. The comparison operator (==) checks for equality between two values, while truthiness checks if a value is considered True or False in a boolean context. In Python, many values can be implicitly converted to a boolean value based on their truthiness. For example, any non-zero number or non-empty container is considered True, while zero, None, and empty containers are considered False.