словарь разделен между объектами без причины?

Следующий код должен создать новую (модифицированную) версию частотного распределения (nltk.FreqDist). Обе переменные должны быть одинаковой длины.

Он отлично работает, когда создается один экземпляр WebText. Но когда создается несколько экземпляров WebText, новая переменная кажется общей для всех объектов.

Например:

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")

результаты в

4 4
4 5
3 7

Что неверно. Поскольку я просто перемещаю и изменяю значения, в каждом столбце должны быть одинаковые числа. Если я сбрасываю freq_dist_weighted непосредственно перед циклом, он работает нормально:

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")

Результаты в (правильно):

4 4
4 4
3 3

Это не имеет смысла для меня.

Я не понимаю, почему мне пришлось бы сбрасывать его, поскольку он изолирован внутри объектов. Я делаю что-то неправильно?

Ответы на вопрос(4)

Ваш ответ на вопрос