今日、奇妙な問題に遭遇しました。ここにサンプルコードがあります
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 クラスの個別のインスタンスであるべきだと思っていたものの間でデータを共有しているのはなぜですか。各入力は特定のインスタンスを指すべきではありませんか?
これを理解するのをより難しくしているのは、ヒット カウンターが正常に機能しているように見え、物事を分離しているように見えることです。
ここで何が起こっているのか、またはそれを修正する方法を理解するのを手伝ってくれる人はいますか?