Understanding the difference between is
and in
in Python is really important — especially when you're trying to write clean and bug-free code. In this short guide, I’ve shared my learning and examples that helped me understand how these two operators work differently.
The is
operator checks identity, not equality.
- It returns
True
if two variables refer to the same object in memory. - It’s often used to check if something is
None
.
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # True – same memory reference
print(a is c) # False – different objects even if content is same
🔸 Use
is
when you care about object identity, not just if values match.
A good use case:
x = None
if x is None:
print("x has no value")
The in
operator checks membership — it tells you if a value exists inside a list, string, tuple, dictionary, etc.
fruits = ["apple", "banana", "cherry"]
print("banana" in fruits) # True
print("grape" in fruits) # False
It also works with strings:
text = "hello world"
print("world" in text) # True
print("python" in text) # False
Expression | Description | Output |
---|---|---|
a is b |
True if a and b are same object |
True |
a == b |
True if a and b have same value |
True |
x in y |
True if x is inside container y |
True/False |
-
❌ Using
is
to compare values:a = 1000 b = 1000 print(a is b) # Might be False even though a == b
-
✅ Use
==
when comparing values, and useis
for identity:print(a == b) # True
-
✅ Always use
is None
, not== None
.
- Use
is
when comparing withNone
or checking identity. - Use
in
to check if a value exists inside something. - Don't mix them up — Python won’t stop you, but your bugs will get harder to find!