Python说2个相等的列表不相等

时间:2017-01-04 23:03:54

标签: python python-2.7 list

我发生了一件非常奇怪的事情,其中​​两个明显相同的列表被Python认为不相同。从这里你可以看到我正在使用的字典元素的IPython控制台输出:

In [251]: saveDict['data']['hpSH']['manifold_type'] Out[251]: ['duct', 'pipe']

然后当我去检查这个相同的字典元素是否等于列表['duct','pipe']时,它说它不是:

In [252]: ['duct', 'pipe'] is saveDict['data']['hpSH']['manifold_type'] Out[252]: False

但是,使用“==”而不是“is”会在控制台中产生True输出。

我发现这是因为它弄乱了我的代码的其他部分而没有使用saveDict ['data'] ['hpSH'] ['manifold_type']进行相同的计算,因为它与['duct','pipe一样“]。为了给你更多的背景故事,saveDict来自cPickle保存的文件。以下是我正在处理的环境:

Windows 10, Python 2.7.12 :: Anaconda 4.1.1(32位), Spyder 2 IDE

1 个答案:

答案 0 :(得分:3)

您应该将列表与==进行比较,而不是is

is运算符用于比较Python运行时中的对象ID;从字面上看,它问两个是同一个对象。观察这个例子:

In [13]: ['a', 'b'] == ['a', 'b']
Out[13]: True

In [14]: ['a', 'b'] is ['a', 'b']
Out[14]: False

检查ID有助于:

In [19]: id(['a', 'b'])
Out[19]: 140365516758984

In [20]: id(['a', 'b'])
Out[20]: 140365515846360

注意:同一列表中的两个id调用(相同的值)会产生不同的ID,因为它们是不同的对象。

有关更多背景信息,请参阅this SO discussion