słownik współdzielony między obiektami bez powodu?

Poniższy kod ma stworzyć nową (zmodyfikowaną) wersję rozkładu częstotliwości (nltk.FreqDist). Obie zmienne powinny mieć taką samą długość.

Działa dobrze, gdy tworzona jest pojedyncza instancja WebText. Ale gdy tworzonych jest wiele instancji WebText, nowa zmienna wydaje się być współdzielona przez wszystkie obiekty.

Na przykład:

import nltk
from operator import itemgetter

class WebText:

    freq_dist_weighted = {}

    def __init__(self, text):
        tokens = nltk.wordpunct_tokenize(text) #tokenize
        word_count = len(tokens)
        freq_dist = nltk.FreqDist(tokens)


        for word,frequency in freq_dist.iteritems():
            self.freq_dist_weighted[word] = frequency/word_count*frequency
        print len(freq_dist), len(self.freq_dist_weighted)

text1 = WebText("this is a test")
text2 = WebText("this is another test")
text3 = WebText("a final sentence")

prowadzi do

4 4
4 5
3 7

Co jest nieprawidłowe. Ponieważ transponuję i modyfikuję wartości, w każdej kolumnie powinny być takie same liczby. Jeśli zresetuję freq_dist_weighted tuż przed pętlą, działa poprawnie:

import nltk
from operator import itemgetter

class WebText:

    freq_dist_weighted = {} 

    def __init__(self, text):
        tokens = nltk.wordpunct_tokenize(text) #tokenize
        word_count = len(tokens)
        freq_dist = nltk.FreqDist(tokens)
        self.freq_dist_weighted = {}

        for word,frequency in freq_dist.iteritems():
            self.freq_dist_weighted[word] = frequency/word_count*frequency
        print len(freq_dist), len(self.freq_dist_weighted)

text1 = WebText("this is a test")
text2 = WebText("this is another test")
text3 = WebText("a final sentence")

wyniki w (poprawne):

4 4
4 4
3 3

To nie ma dla mnie sensu.

Nie rozumiem, dlaczego musiałbym go zresetować, ponieważ jest izolowany wewnątrz obiektów. czy robię coś źle?