我今天遇到了一個奇怪的問題意外的行爲,這裏是一些示例代碼與defaultdict
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類的單獨實例之間設置共享數據。不應該每個輸入指向特定的實例?
是什麼使這個更難理解的是,熱門計數器似乎工作正常,並保持獨立。
任何人都可以幫助我瞭解這裏發生了什麼或如何解決它?
措辭不同,但相同的問題http://stackoverflow.com/questions/14667465/multiple-instances-of-a-python-object-are-acting-like-the-same-實例 – tacaswell