有没有一种方法来检查的Python(不同的)内部结构对象测试为相等(==)?

StackOverflow https://stackoverflow.com/questions/1665176

  •  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,或到int17两个相同的引用,也会引发相同的报警。当然,你可以保持自省,除去这种情况下,消除第一遍从列表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()

但我怀疑的回报率投资这样一个深刻反省咯!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top