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

时间:2013-12-13 10:29:48

标签: 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_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)。

我该如何解决?

1 个答案:

答案 0 :(得分:3)

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

所以在参数列表中放回ip_c_dict = None,然后放在

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

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