不需要的通用类字典更新而不是单类字典更新python

不需要的通用类字典更新而不是单类字典更新python,python,class,dictionary,updating,Python,Class,Dictionary,Updating,我试图读一些关于这个话题的文章,但我想不出一个可能的解决办法 我有一本这类词典: class flux(object): def __init__(self, count_flux=0, ip_c_dict=defaultdict(int), ip_s_dict=defaultdict(int), conn_dict=defaultdict(int)): self.count_flux = count_flux self.ip_c_dict = ip_c_

我试图读一些关于这个话题的文章,但我想不出一个可能的解决办法

我有一本这类词典:

class flux(object):
    def __init__(self, count_flux=0, ip_c_dict=defaultdict(int), ip_s_dict=defaultdict(int), conn_dict=defaultdict(int)):
        self.count_flux = count_flux
        self.ip_c_dict = ip_c_dict if ip_c_dict is not None else {}
        self.ip_s_dict = ip_s_dict if ip_s_dict is not None else {}
        self.conn_dict = conn_dict if conn_dict is not None else {}
每次我尝试以这种方式更新字典时:

dictionary[key].ip_c_dict[some_string]+=1
不仅更新当前密钥的字典,还更新所有其他密钥。当然,它发生在类中的所有三个字典中,ip_c_dict=defaultdict(int),ip_s_dict=defaultdict(int),conn_dict=defaultdict(int)


如何修复它?

我在回答中说,不应该将dict放在默认参数中,因为这样dict最终会在所有实例之间共享。默认参数中的defaultdict(int)只计算一次(当第一次创建方法时),然后调用该方法的所有时间都使用与默认值相同的dict

所以把ip_c_dict=None放回参数列表中,并放在put下面

self.ip_c_dict = ip_c_dict if ip_c_dict is not None else defaultdict(int)

这样,如果ip_c_dict参数为None,则每次都会创建一个新的defaultdict(int)。

我在回答中说,不应该将dict放在默认参数中,因为这样一来,dict最终会在所有实例之间共享。默认参数中的defaultdict(int)只计算一次(当第一次创建方法时),然后调用该方法的所有时间都使用与默认值相同的dict

所以把ip_c_dict=None放回参数列表中,并放在put下面

self.ip_c_dict = ip_c_dict if ip_c_dict is not None else defaultdict(int)

这样,如果ip_c_dict参数为None,则每次都会创建一个新的defaultdict(int)。

我在回答中说,不应该将dict放在默认参数中,因为这样一来,dict最终会在所有实例之间共享。默认参数中的defaultdict(int)只计算一次(当第一次创建方法时),然后调用该方法的所有时间都使用与默认值相同的dict

所以把ip_c_dict=None放回参数列表中,并放在put下面

self.ip_c_dict = ip_c_dict if ip_c_dict is not None else defaultdict(int)

这样,如果ip_c_dict参数为None,则每次都会创建一个新的defaultdict(int)。

我在回答中说,不应该将dict放在默认参数中,因为这样一来,dict最终会在所有实例之间共享。默认参数中的defaultdict(int)只计算一次(当第一次创建方法时),然后调用该方法的所有时间都使用与默认值相同的dict

所以把ip_c_dict=None放回参数列表中,并放在put下面

self.ip_c_dict = ip_c_dict if ip_c_dict is not None else defaultdict(int)

这样,如果ip_c_dict参数为None,则每次都会创建一个新的defaultdict(int)。

您可以显示更多代码吗?您可以显示更多代码吗?您可以显示更多代码吗?您可以显示更多代码吗?这里有一个解释这里有一个解释这里有一个解释这里有一个解释这里有一个解释