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

2024-04-26 00:46:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

然后,当我检查这个dictionary元素是否等于list['duct','pipe']时,它说它不是:

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

但是,使用“==”而不是“is”会在控制台中产生一个真正的输出。你知道吗

我发现这一点是因为它弄乱了代码的其他部分,并且使用saveDict['data']['hpSH']['manifold\u type']进行的计算与使用['duct','pipe']时不同。为了给你更多的背景故事,saveDict来自cPickle制作的一个保存的文件。以下是有关我工作环境的更多信息:

Windows 10, Python 2.7.12::Anaconda 4.1.1(32位), Spyder 2集成开发环境


Tags: in元素列表data字典环境istype
1条回答
网友
1楼 · 发布于 2024-04-26 00:46:11

您应该比较列表是否与==相等,而不是is

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

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

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

检查ids有助于:

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

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

注意:在同一个列表上对id的两个调用(相同的值)产生不同的id,因为它们是不同的对象。你知道吗


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

相关问题 更多 >