dicionário compartilhado entre objetos sem motivo?

O seguinte código deve criar uma nova versão (modificada) de uma distribuição de frequência (nltk.FreqDist). Ambas as variáveis ​​devem ter o mesmo comprimento.

Ele funciona bem quando uma única instância do WebText é criada. Mas quando várias instâncias do WebText são criadas, a nova variável parece ser compartilhada por todos os objetos.

Por exemplo:

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

resulta em

4 4
4 5
3 7

Qual é incorreto Como estou apenas transpondo e modificando valores, deve haver os mesmos números em cada coluna. Se eu redefinir o freq_dist_weighted pouco antes do loop, ele funciona bem:

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

resulta em (correto):

4 4
4 4
3 3

Isso não faz sentido para mim.

Eu não vejo porque eu teria que redefini-lo, já que está isolado dentro dos objetos. Estou fazendo algo errado?

questionAnswers(4)

yourAnswerToTheQuestion