【发布时间】:2009-11-03 04:04:11
【问题描述】:
昨天我问(“在 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 --> True)。
是否有实用程序、技巧、内置程序,可以向我展示这些不同的内部结构?可能会产生类似 C 的对象声明,以便我立即看到我正在处理一种情况下的指针(列表 W)和其他情况下的值?
【问题讨论】:
-
我还不太明白这个问题。 Python 用对象做所有事情。任何列表都是对象引用的集合。当您比较两个列表时,如果它们的长度相同,并且如果它们各自的对象在比较时返回相等,则列表返回相等。 Python 还有一个
is运算符来检查对象身份;也许您可以使用is来检查事情以更好地了解发生了什么。 -
@steveha:将对象的浅拷贝称为“值”并将对原始对象的引用称为“指针”是有罪的。问题的关键在于你的第四句话:“如果”我去做了所有这些事情,那么,是的,我可以看到两个看起来相等(通过==)的对象是不同的,但这太像工作了。我想要一个调试工具,以便在一秒钟左右的时间内我可以看到差异。图形,类似于 C 结构的规范,例如---
标签: python list set inspection