Compare if two variables reference the same object in python

后端 未结 6 1179
别跟我提以往
别跟我提以往 2021-01-30 06:29

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         


        
相关标签:
6条回答
  • 2021-01-30 06:30

    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
    
    0 讨论(0)
  • 2021-01-30 06:34

    y is x will be True, y is z will be False.

    0 讨论(0)
  • 2021-01-30 06:46

    You can also use id() to check which unique object each variable name refers to.

    In [1]: x1, x2 = 'foo', 'foo'
    
    In [2]: x1 == x2
    Out[2]: True
    
    In [3]: id(x1), id(x2)
    Out[3]: (4509849040, 4509849040)
    
    In [4]: x2 = 'foobar'[0:3]
    
    In [5]: x2
    Out[5]: 'foo'
    
    In [6]: x1 == x2
    Out[6]: True
    
    In [7]: x1 is x2
    Out[7]: False
    
    In [8]: id(x1), id(x2)
    Out[8]: (4509849040, 4526514944)
    
    0 讨论(0)
  • 2021-01-30 06:56

    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..

    0 讨论(0)
  • 2021-01-30 06:57

    That’s what is is for: x is y returns True if x and y are the same object.

    0 讨论(0)
  • 2021-01-30 06:57

    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.

    0 讨论(0)
提交回复
热议问题