gpt4 book ai didi

python - 对象之间无缘无故共享字典?

转载 作者:行者123 更新时间:2023-11-28 19:32:11 26 4
gpt4 key购买 nike

以下代码应该创建频率分布 (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

这对我来说没有意义。

我不明白为什么我必须重置它,因为它在对象中是孤立的。我做错了什么吗?

最佳答案

您的评论显然是错误的。类作用域中的对象仅在类创建时初始化;如果您希望每个实例有一个不同的对象,那么您需要将它移到初始化程序中。

class WebText:
def __init__(self, text):
self.freq_dist_weighted = {} #### RESET the dictionary HERE ####
...

关于python - 对象之间无缘无故共享字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com