有没有一种方法来检查的Python(不同的)内部结构对象测试为相等(==)?
-
13-09-2019 - |
题
昨天我问(“组的Python 2.5(我认为...)下表现不同向外等于列表的情况”)为什么列表W¯¯构造如下:
r_dim_1_based = range( 1, dim + 1)
set_dim_1_based = set( r_dim_1_based)
def listW_fill_func( val):
if (val == 0):
return set_dim_1_based
else:
return set( [val])
W = [ listW_fill_func( A[cid])
for cid in r_ncells ]
如我所料不表现。特别是,它没有表现得像其他列出了表现出平等它(another_list == W - >真)。
有没有一种实用工具,诀窍,内置,不管这会表明这些不同的内部结构,给我吗?这将产生或许是对象的类C的声明,这样我会看到一次,我正在处理的指针在一种情况下(表W)和值在其他东西吗?
解决方案
您正在处理在每种情况下(更类似于指针,而不是值)引用。你一定能反思你的对象的引用你的心脏的内容 - 例如,如果你有一个列表,并要检查,如果任何项目是相同的标记,
if len(thelist) != len(set(id(x) for x in thelist)): ...
DO注意,我们在谈论这里引用 - 因此,两个相同的引用None
,或到int
值17
两个相同的引用,也会引发相同的报警。当然,你可以保持自省,除去这种情况下,消除第一遍从列表immutables,例如,如果你认为相同的不可变的多个引用都很好 - e.g:
immutyps = int, long, float, tuple, frozenset, str, unicode
mutables = [x for x in thelist if not isinstance(x, immutyps)]
if len(mutables) != len(set(id(x) for x in mutables)):
cryhavocandletloosethedogsofwar()
但我怀疑的回报率投资这样一个深刻反省咯!
不隶属于 StackOverflow