+ 67
a = [1,2,3,4] , b = [1,2,3,4] . How are they not same
a == b returns True Then why ‘a is b’ returns False? a and b are the same lists after all !
127 Answers
+ 272
Imagine a and b as twins:
They're equal, but they're still two separate 'persons'.
+ 162
Write in your interpreter
print(id(a))
print (id(b))
and you will see that a and b are 2 objects that have different addresses in memory
+ 50
I understand those lists are different objects, so they have their own id and point to different addresses of memory, for that reason a is not b. If you change a, b will still being [1,2,3,4]
+ 42
Hi Loay I agree with all but I want to add some to your comment, for avoiding a possible misunderstanding.
The case when we let
x = n
y = n
With n a number and not another variable (this is important), if our n is any integer between -5 and 256, so "x is y" returns true because they REALLY are the same object and will always have the same id for every number in there. But any other integer will return false for "x is y" because they will be different objects. Examples:
i = 256
j = 256
i is j
>>> True
x = 257
y = 257
x is y
>>> False
a = 300
b = a
a is b
>>> True
https://docs.python.org/3/c-api/long.html
(I know, that says "long" but the explanation is inside :P)
Plz if I have some mistake I'm very thankful if someone corrects me, keep coding!
+ 30
By human language, I think it can be translated as something like this:
I have two hands. `a = [1, 2, 3, 4]`
You have two hands. `b = [1, 2, 3, 4]`
We both have two hands. `a == b`
But my hands are not your hands. `a is not b`
+ 22
from docs.python.org
✅ every object has an identity, a type and a value.
⚠️ object identity is object’s address in memory.
✅ ‘is’ operator compares the identity of two objects
🙏🏻 so even if two objects have same value but they are not same identity .
+ 11
Have a look at this :- https://www.w3schools.com/JUMP_LINK__&&__python__&&__JUMP_LINK/python_operators.asp
....about half way down the page.
+ 10
As stated they are different locations in memory.
+ 10
Here "is" operator is an identity operator whereas "==" is an assignment operator.
Identity operator is used to compare the memory locations of both the variables or operands.If they have identical memory location then it will return True as an output.
Assignment operator is used to compare the vaalues of both the variables, if they have identical values then it will return True as an output
+ 8
Equal Values of two variables can't make them same.......
like age of A and age of B are equal but that doesn't mean that A and B are same person ....like this value of a and value of b are same but they are still having different identity (address).....so they're not same !!!
+ 6
Many already wrote here: a is not b. They are different objects, that in this Case hold the same Value.
But this Brings me to Another Topic:
If you want to duplicate a list, Never try to do it like this:
b = [1,2,3,4]
a = b
Because in this case the lists will refer to the same space in memory. They will really be the same. And Changing a after that will Change b too.
Instead do:
a = b.copy()
+ 4
Please, guys, at least READ the question before you answer it (for the n-th time).
This is about PYTHON!
+ 2
When we let
x = 1
y = 1
both x== y & x is y return true
as immutable objects in python
share the same memory
Like definig y as a reference for x in other languages but they are not a reference just when they share the same value memory management tends to link them to point to one shared address
i.e
x = 1, y= x
x = 3
y still equal to 1
To make that clear
(1, 2, 3) is (1, 2, 3) return true
But for list which is mutable each created list is nothing but a linkedList object have different pointers in memory blindly can't see other objects that share their same value but in other addresses
You can use id(x), id(y) that will help you see each object memory address
+ 2
Same contents but the variables are different.
+ 2
The equal operators make a == b True so in the statement 'a is b' is does not give value to the variables 'a' and 'b'.
+ 2
I think may be memory allocated is different between a and b, even we seen the list is same.
+ 2
Here, a==b is always true, but they are totally unique, and has different addresses, so they aren't same
+ 2
a=[1,2,3]
b=[1,2,3]
print(a==b) //equal thier values like [1,2,3]
print(a is b) //equal like objects a and b, they are different
print(id(a))
print(id(b))
+ 2
Hello everyone,
with „==„ you compare the lists and they are actually equal, that‘s why the output would be True if you print it.
But a = b means that you assign the value of b to the variable a
( In other words you give variable a the same value as b)
If you print(a) now the result will be the same as b because you gave a the same value as b.
I hope my explanation is helpful.
+ 2
Imagine a and b as twins:
They're equal, but they're still two separate 'persons'.