我试着阅读有关该主题的内容,但我无法找到可能的解决方案。
我有这种类型的字典:
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)。
我该如何解决?
答案 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)。