Each Answer to this Q is separated by one/two green lines.
How to check whether two variables reference the same object?
x = ['a', 'b', 'c'] y = x # x and y reference the same object z = ['a', 'b', 'c'] # x and z reference different objects
is is for.
In the example,
x is y returns
True because it is the same object while
x is z returns
False because it are different objects (which happen to hold identical data).
While the two correct solutions
x is z and
id(x) == id(z) have already been posted, I want to point out an implementation detail of python. Python stores integers as objects, as an optimization it generates a bunch of small integers at its start (-5 to 256) and points EVERY variable holding an integer with a small value to these preinitialized objects. More Info
This means that for integer objects initialized to the same small numbers (-5 to 256) checking if two objects are the same will return true (ON C-Pyhon, as far as I am aware this is an implementation detail), while for larger numbers this only returns true if one object is initialized form the other.
> i = 13 > j = 13 > i is j True > a = 280 > b = 280 > a is b False > a = b > a 280 > a is b True
y is x will be
y is z will be
You can also use id() to check which unique object each variable name refers to.
In : x1, x2 = 'foo', 'foo' In : x1 == x2 Out: True In : id(x1), id(x2) Out: (4509849040, 4509849040) In : x2 = 'foobar'[0:3] In : x2 Out: 'foo' In : x1 == x2 Out: True In : x1 is x2 Out: False In : id(x1), id(x2) Out: (4509849040, 4526514944)
I really like to have a visual feedback, that’s why I sometimes just open up http://www.pythontutor.com/visualize.html#mode=edit to see how the memory is allocated and what is referencing what.
Added this awesome gif as this reply is about visualizing..
This is from docs.python.org: “Every object has an identity, a type and a value. An object’s identity never changes once it has been created; you may think of it as the object’s address in memory. The ‘is’ operator compares the identity of two objects; the id() function returns an integer representing its identity.”
Apparently every time you change the value the object is recreated as indicated by the identity changing. The line x=3 followed by the line x=3.14 gives no error & gives different identities, types and values for x.