index()返回的项的对象ID显示错误

时间:2015-07-09 20:00:30

标签: list python-2.7

我正在使用Python 2.7并且有一个有序的对象列表(在self.root.content中),我正在使用索引方法查询。但是,'index'返回的索引的值显然与我想要的对象的索引(在my_obj中保存)不匹配。 如果我'手动'循环遍历列表并查找我的对象:

    for idx,body in enumerate(self.root.content):
        print idx,id(body),": ", body
        if body is my_obj:
            print "Match at index {0}".format(idx)

然后我得到以下输出:

  ...
  12 64788560 :        REAL(KIND=wp), intent(inout) :: rdt
  13 64788880 :        INTEGER, intent(inout) :: istp
  14 64717648 :        INTEGER j
  15 36601744 :        INTEGER i
  16 36599504 :        INTEGER istop, jstop
  Match at index 16
  17 36599952 :        DO j=2,jstop
  ...

但是,如果我使用内置索引方法,如下所示:

    my_index = self.root.content.index(my_obj) 
    print "ID for object at returned index ({0}) is: {1}".\
        format(my_index, id(self.root.content[my_index]))

然后我得到:

   ID for object at returned index (13) is: 64788880

我无法解释这一点。谁能摆脱任何光明? (我已经检查了self.root.content的type(),它是'list'。)

感谢凯文的建议,我试过了:

    for idx,body in enumerate(self.root.content):
        print idx,id(body),": ", body
        if body == my_obj:
            print "Match at index {0}".format(idx)

这给了:

...
13 48174928 :        INTEGER, intent(inout) :: istp
Match at index 13
14 48099600 :        INTEGER j
Match at index 14
15 48095184 :        INTEGER i
Match at index 15
16 48092944 :        INTEGER istop, jstop
Match at index 16
...

我的印象是索引方法在提供的对象列表中返回索引。如果不是这种情况,那么它与任意/复杂对象匹配的是什么?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,因为我已经弄明白了: 列表中的某些(但不是全部)对象属于已重写 eq 运算符且已更改测试的默认行为以进行相等的类。推测index()方法测试的是相等而不是使用'。 我想我必须使用' is'来手动查找。像我在问题中的第一个代码片段中那样进行测试。