为什么Python参考相等不起作用?

时间:2019-05-30 23:04:31

标签: python

我有一个带有名为self.sheets的数组的类。我有一个函数find_sheet,如果传递了一个字符串,它将对标题进行比较,如果传递了一个Worksheet,则进行引用比较。这是一个最小的可重现示例:

class Worksheet:
    pass


class Spread:
    @property
    def sheets(self):
        return [Worksheet() for i in range(5)]

    def find_sheet(self, sheet):
        for ix, obj in enumerate(self.sheets):
            print("comparing {} is {}".format(id(obj), id(sheet)))
            if obj is sheet:
                print("found you")


s = Spread()
s.find_sheet(s.sheets[0])

这将输出comparing 140134415396760 is 140134393512344

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。当我引用s.sheets时,它每次都调用属性函数并生成一个新列表。因此,当我传递s.sheets[0]时,它实际上是与遍历self.sheets的第一个对象不同的对象。

这里的教训是...使用属性时要小心,它们的行为不同于变量。