比较两个变量是否引用相同对象在Python中
如何检查两个变量是否指向同一个对象?
x = ['a', 'b', 'c']
y = x # x and y reference the same object
z = ['a', 'b', 'c'] # x and z reference different objects
6 个回答
13
这里的意思是,y是x
的结果会是True
,也就是说y和x是同一个东西。而y是z
的结果会是False
,说明y和z不是同一个东西。
23
虽然之前已经有人提到过两个正确的解决方案 x is z
和 id(x) == id(z)
,但我想强调一下Python的一个实现细节。Python把整数当作对象来存储,为了提高效率,它在一开始就生成了一些小整数(从-5到256),并且把每个持有这些小整数的变量都指向这些预先初始化的对象。更多信息
这意味着,对于初始化为相同小数字(-5到256)的整数对象,检查这两个对象是否相同会返回真(在C-Python中,据我所知这是一个实现细节),而对于更大的数字,只有当一个对象是从另一个对象初始化时,这个检查才会返回真。
> i = 13
> j = 13
> i is j
True
> a = 280
> b = 280
> a is b
False
> a = b
> a
280
> a is b
True
注意:在交互式终端和脚本之间,这种行为可能会有所不同。比如,pythontutor提到:
对于字符串和数字,你不能依赖于id()或is在你的电脑上表现得和CPython完全一样(示例);在教初学者时,永远不要依赖这些,因为它们是特定于实现的,并且在REPL和脚本之间会有所不同。
193
这就是 is
的作用。
在这个例子中,x is y
返回 True
,因为它们是同一个对象,而 x is z
返回 False
,因为它们是不同的对象(虽然它们里面的数据是一样的)。