1
yaroot 2013-09-05 20:34:44 +08:00
摘自文档: A set object is an unordered collection of distinct hashable objects.
|
2
keakon 2013-09-05 20:35:08 +08:00
性能从 O(1) 下降到 O(n)
|
6
banxi1988 OP @yaroot print("set len",len({p1,p2,p3,p4,p5})) #output:('set len', 2)
然后呢? |
7
banxi1988 OP @keakon
我对__hash__时是否对addrs进行hash进行简单的测试,显然是不进行__hash__来得快: 对比如下: def __hash__(self): # saddrs = sorted(self.addrs, key=lambda addr:addr.name) # addrs_str = ''.join([addr.name for addr in saddrs]) return hash((self.name,self.sex)) 对addrs进行hashed,构造及比较部分需要的时间: # with addr hashed ('time=', 4.042909860610962) 不hash时花的时间: # without addr hashed ('time=', 2.322601795196533) 这样看来不对addrs进行hash是正确的选择喽。那hash用来做什么呢? @yaroot |
8
yaroot 2013-09-05 23:03:07 +08:00 1
@banxi1988
http://docs.python.org/2/reference/datamodel.html#object.__hash__ http://docs.python.org/2/glossary.html#term-hashable 被误导了下....但我觉得还是按照文档来实现比较好, 虽然set用__eq__的.. 但是按文档这样也会产生冲突, 都是mutable object, 除非你都当它们是immutable的.. 这个还是看你实际需求吧...性能瓶颈一般不会在这里 |