¿Diccionario compartido entre objetos sin motivo?

Se supone que el siguiente código crea una nueva versión (modificada) de una distribución de frecuencia (nltk.FreqDist). Ambas variables deben ser de la misma longitud.

Funciona bien cuando se crea una sola instancia de WebText. Pero cuando se crean múltiples instancias de WebText, la nueva variable parece ser compartida por todos los objetos.

Por ejemplo:

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

resultados en

4 4
4 5
3 7

Lo cual es incorrecto. Ya que solo estoy transponiendo y modificando valores, debería haber los mismos números en cada columna. Si reinicio el freq_dist_weighted justo antes del bucle, funciona bien:

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

resultados en (correcto):

4 4
4 4
3 3

Esto no tiene sentido para mí.

No veo por qué tendría que restablecerlo, ya que está aislado dentro de los objetos. ¿Estoy haciendo algo mal?