a = [1,2,3,4] , b = [1,2,3,4] . How are they not same | Sololearn: Learn to code for FREE!

+35

# 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 !

11/18/2019 6:48:40 PM

Anushka Mehta

+127

Imagine a and b as twins: They're equal, but they're still two separate 'persons'.

+93

a == b but a is not b. you'll need to do this, to make "is" becomes true a=b=[1,2,3,4]

+82

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

+29

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]

+20

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!

+11

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 .

+8

Have a look at this :- https://www.w3schools.com/python/python_operators.asp ....about half way down the page.

+8

As stated they are different locations in memory.

+7

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

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`

+4

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

+3

+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

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()

+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))

+1

HonFu Awesome analogy! I will recklessly steal that.