我今天遇到了一个奇怪的问题,这是一些示例代码
from collections import defaultdict
class Counter:
hits = 0
visitors = set()
def addHit(self, ip):
self.hits += 1
self.visitors.add(ip)
d = defaultdict(Counter)
d['a'].addHit('1.1.1')
d['a'].addHit('2.2.2')
d['b'].addHit('3.3.3')
print d['a'].hits, d['a'].visitors
print d['b'].hits, d['b'].visitors
预期结果:
2 set(['1.1.1', '2.2.2'])
1 set(['3.3.3'])
实际结果:
2 set(['1.1.1', '3.3.3', '2.2.2'])
1 set(['1.1.1', '3.3.3', '2.2.2'])
为什么访问者集在我认为应该是 Counter 类的单独实例之间共享数据。每个输入不应该指向一个特定的实例吗?
使这更难理解的是,命中计数器似乎工作正常并且将事物分开。
谁能帮助我了解这里发生了什么或如何解决它?