Why does " is [ ]" evaluate to False in python
Try this in an interactive python shell.
 is [ ]
The above returns False, why?
You created two mutable objects, then used
is to see if those are the same object. That should definitely return
False, or something would be broken.
You wouldn't ever want
is to return true here. Imagine if you did this:
foo =  bar =  foo.append(42)
then you'd be very surprised if
bar now contains
is returned true, meaning that both
 invocations returned the exact same object, then appending to
foo would be visible in the reference to
For immutable objects, it makes sense to cache objects, at which point
is may return true, like with empty tuples:
>>> () is () # are these two things the same object? True
The CPython implementation has optimised empty tuple creation; you'll always get the exact same object, because that saves memory and makes certain operations faster. Because tuples are immutable, this is entirely safe.
If you expected to test for value equality instead, then you got the wrong operator. Use the
== operator instead:
>>>  ==  # do these two objects have the same value? True
Why does coronavirus kill some people and spare others?, Scientists are exploring genetic factors, including a person's blood type, how the virus is transmitted, and whether particular strains might be� Does it take you forever to make a doctor’s appointment, clean out your garage, or do your taxes? Putting off something that needs to be done is called procrastination.We all do it sometimes.
is does a
reference equality check like  and  they are different objects you can check that by
In : id() Out: 140464629086976 In : id() Out: 140464628521656
both will return different address and both are different object so is will always give false
 is 
Why do some COVID-19 patients infect many others, whereas most , Is it true that getting vaccinated repeatedly can reduce vaccine effectiveness? Why are there so many different outcomes for vaccine effectiveness studies? How� Why Does Trump Lie? It’s mortifying enough to imagine the damage he can do in the next five months, let alone the following four years if he’s re-elected.
 is like
list(), if you do this:
a = list() b = list()
b are two completly different objects, hence:
a is b # False
list() is list() # False
 is  # False
Vaccine Effectiveness: How Well Do the Flu Vaccines Work?, Why Do Clocks run Clockwise? asks the title of a book by David Feldman. Why indeed! This odd book looks at 239 such questions. First they look innocent� You may have noticed that after eating asparagus, your pee has a somewhat unpleasant scent. This article explains why eating asparagus makes pee smell and why only some people can smell it.
== operator compares the values of both the operands and checks for value equality. Whereas
is operator checks whether both the operands refer to the same object or not.
id('') : 139634828889200 id('') : 139634828889200 id('') : 139634828889200 id() : 139634689473416 id() : 139634689054536 id() : 139634742570824
No. 424: Why Does? Why Is?, Why does Sargassum smell so bad? When washed ashore, Sargassum will decompose (rot). Rotting Sargassum causes the production of hydrogen sulfide gas� But why does it rotate at all? The Earth formed out of a disk of gas and dust that swirled around the newborn sun. In this spinning disk, bits of dust and rock stuck together to form the Earth,
[PDF] Sargassum, But health experts say the evidence is clear that masks can help prevent the Why did the CDC change its guidance on wearing masks? Caffeine is the most widely consumed stimulant in the world.That being said, it does not affect everyone in the same way. Some people, for example, can drink multiple cups during the day and
Still Confused About Masks? Here's the Science Behind How Face , An Xiao Mina joins us to discuss why the new kid on the social media block is causing waves in halls of power around the world. Purrs release feel-good endorphins, so experts think cats use the vibrations to soothe themselves. That could mean your cat purring while enjoying some cozy cuddles from you, or it might help calm
Why Does TikTok Bother the Powerful So Much?, Researchers have identified microscopic features that could make the pathogen more infectious than the SARS virus — and serve as drug� The carriers for CDMA do not have to accept your phone onto its network. What Is a SIM Card and Why Do You Need One? If you have never seen a SIM card, it basically looks like a tiny piece of plastic.
- Maybe you should explain why you think it should be true?
 is will also fail: the two are different objects.
isdoes a reference equality check.
- Why should this be true? You created two empty mutable objects, you wouldn't want them to be the same object.
- @Giacomod'Antonio: that's easy to research however. The OP didn't share any of their research, nor did they explain why they expected this expression to be true. You are assuming that they confused
==(the value equality operator), but perhaps they thought it would be efficient instead? For example, for two empty tuple expressions this would be true:
() is (), as is
1 is 1.
- @BillalBEGUERADJ: badly researched != off-topic. And I'm assuming there was no research only because nothing in the question shows otherwise.
idtests aren't doing what you think they are. It's quite common for the
idvalues gave True instead of False.
- Why does it matter what way the empty list objects were created?
- @MartijnPieters, it does not matter, maybe i did not explained well, or you did not understand what i would like to explain?
- What I mean is that it doesn't matter if you use
 is or
list() is list(); both expressions create empty list objects. To say that
list()you are not explaining anything about why the
False, because the difference between
list()doesn't matter here. Also, your
== Falsetests are incorrect; you are testing if
(a is b) and (b == False), because Python comparison operators are chained.
- @MartijnPieters, ok so i explained badly, i was just poiting that
list()both build objects, and in each call both build diferent objects, so it was obvious that
 is would be evaluated to false. About the operators, it was just me relaxing and writting python sintax for making the point, not written reliable python code, sorry.