Python 比较两个容器的内容标识
我有一个返回一组对象的方法,我正在为这个方法编写一个单元测试。是否有一种通用的、整洁的、惯用的方法来比较这些方法的同一性(而不是平等性)?或者我需要自己编写一个合适的实现吗 一个例子(为了保持简单,有些刻意):Python 比较两个容器的内容标识,python,containers,identity,Python,Containers,Identity,我有一个返回一组对象的方法,我正在为这个方法编写一个单元测试。是否有一种通用的、整洁的、惯用的方法来比较这些方法的同一性(而不是平等性)?或者我需要自己编写一个合适的实现吗 一个例子(为了保持简单,有些刻意): 重要的是,在这里进行相等性测试是行不通的,因为对foo\u objects\u返回的对象进行变异,使其具有\u property()可能会导致不一致的结果,这取决于这些对象在容器中的不同使用方式,即使它们在测试时是“相等的”。我能想到的最好办法是: @staticmethod def s
重要的是,在这里进行相等性测试是行不通的,因为对
foo\u objects\u返回的对象进行变异,使其具有\u property()
可能会导致不一致的结果,这取决于这些对象在容器中的不同使用方式,即使它们在测试时是“相等的”。我能想到的最好办法是:
@staticmethod
def set_id(c):
return set([id(e) for e in c])
def assertContentIdentity(self, a, b):
self.assertEqual(set_id(a), set_id(b))
但是,这是专门针对集合的,不能处理嵌套容器。一种简单但不是最有效的方法:
def assertContentIdentity(set1, set2):
set1 = set([id(a) for a in set1])
set2 = set([id(a) for a in set2])
assert set1 == set2
从那以后,x就是y就不会在这里工作了
你能告诉我布景是
不同,我已经知道了。我
想知道他们看到的对象
包含相同的对象或对象
不同的对象
然后您需要编写自己的函数,如
set([id(x) for x in X]) == set([id(y) for y in Y])
很不清楚你在问什么。你想比较什么对象?为什么它们应该是一样的?使用x is y
测试标识。我想知道两个容器(本例中的集合)是否相同,而不仅仅是相等x是y
在这里不起作用,因为这会告诉我集合是不同的,我已经知道了。我想知道它们包含的对象是相同的对象还是不同的对象。为什么这些对象是相同的,只要它们相等就重要?考虑到在确定是否在容器中复制某个集合时,SET本身考虑了相等性而不是身份。还考虑到相等性的测试默认为用户定义类型的身份测试。如果在以后的例子中,我将通过<代码> FooSoObjutix返回一个对象,在我的例子中,它是一个属性< /代码>,那么如果测试产生假阳性,那么我可能会对错误的对象进行突变。在稀薄的空气中没有新的物品出现在容器中?其他测试可能已经涵盖了这一点。。。
set([id(x) for x in X]) == set([id(y) for y in Y])