我发生了一件非常奇怪的事情,其中两个明显相同的列表被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
答案 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