Je suis tombé sur un problème aujourd'hui bizarre, voici quelques exemples de codeComportement inattendu avec 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
Résultat attendu:
2 set(['1.1.1', '2.2.2'])
1 set(['3.3.3'])
Résultat réel:
2 set(['1.1.1', '3.3.3', '2.2.2'])
1 set(['1.1.1', '3.3.3', '2.2.2'])
Pourquoi la Le visiteur définit le partage des données entre ce que je pensais être des instances séparées de la classe Counter. Chaque entrée ne devrait-elle pas pointer vers une instance spécifique? Ce qui rend cela plus difficile à comprendre, c'est que le compteur semble fonctionner correctement et garder les choses séparées.
Quelqu'un peut-il m'aider à comprendre ce qui se passe ici ou comment y remédier?
formulé différemment, mais même problème que http://stackoverflow.com/questions/14667465/multiple-instances-of-a-python-object-are-acting-like-the-same- instance – tacaswell