如何检查两个变量是否引用同一个对象?
x = ['a', 'b', 'c']
y = x # x and y reference the same object
z = ['a', 'b', 'c'] # x and z reference different objects
Run Code Online (Sandbox Code Playgroud)
Joc*_*zel 119
这is就是:x is y返回Trueif x和y是同一个对象.
虽然这两个正确的解决方案x is z,id(x) == id(z)我想指出python的实现细节.Python将整数存储为对象,作为优化,它在其开始时生成一堆小整数(-5到256),并指向包含这些预初始化对象的小值整数的每个变量.更多信息
这意味着对于初始化为相同小数(-5到256)的整数对象,检查两个对象是否相同将返回true(ON C-Pyhon,据我所知这是一个实现细节),而对于更大的数字只有在一个对象从另一个对象初始化时才返回true.
> i = 13
> j = 13
> i is j
True
> a = 280
> b = 280
> a is b
False
> a = b
> a
280
> a is b
True
Run Code Online (Sandbox Code Playgroud)
您还可以使用id()来检查每个变量名称引用的唯一对象.
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)
Run Code Online (Sandbox Code Playgroud)