当我只想更新一个字典时,为什么两个字典的值都会更新? (Python OOP)

时间:2017-12-08 01:21:56

标签: python oop

以下是我的代码的相关部分:

class Document:
    def __init__(self):
        self.term_frequency_per_document = {}
        self.document_frequency = {}
        self.term_freq_inv_doc_freq = {}
        self.file = None
        self.student_list = []
        self.index = 0

    def calculate_TFIDF(self):

        for key in self.term_frequency_per_document:
            for value in self.term_frequency_per_document[key]:
                self.term_freq_inv_doc_freq[key] = self.term_frequency_per_document.get(key)
            for value in self.term_freq_inv_doc_freq[key]:
                self.term_freq_inv_doc_freq[key][value] = \
                    (self.term_freq_inv_doc_freq[key][value]) * \
                    (math.log(26 / float(self.document_frequency.get(value))))

        print (self.term_freq_inv_doc_freq)
        print (self.document_frequency)
        print (self.term_frequency_per_document)

当我执行calculate_TFDIF方法时,正在更新self.term_frequency_per_documentself.term_freq_inv_per_doc字典的值,而我只想更新后一个字典的值。我知道错误的更新发生在calculate_TFDIF方法中,但我无法弄清楚原因。

term_frequency_per_document字典应为:

{'student_1': {'love': 1, 'play': 2, 'watch': 1}, 'student_2': {'favorite': 2, 'hobby': 1}

执行calculate_TFDIF方法后,term_freq_inv_doc_freq字典应为:

{'student_1': {'love': 1.6486586255873816, 'play': 2.121743921370525, 'watch': 1.8718021769015913} 'student_2': {'favorite': 1.9110228900548727, 'hobby': 1.1786549963416462}

不幸的是,这两个词典看起来都像后者。

1 个答案:

答案 0 :(得分:0)

我怀疑你将相同的字典分配给两个变量,然后两个变量在内存中使用相同的数据。您必须使用copy.deepcopy()创建两个单独的词典。

顺便说一句:您可以在pythontutor.com上运行代码,看看Python如何使用对内存对象的“引用”(当您在pythontutor上运行代码时,请参阅“箭头”)