我是python的新手。当我玩这些代码时,我发现了这一点。
源代码:
dic = {}
mem_dic = {}
def set_op(ind, data):
global dic, mem_dic
key, value = data.split()
dic[key] = int(value)
mem_dic[ind] = dic
print(ind, "====", mem_dic)
set_op(0, 'aaa 1')
set_op(1, 'bbb 2')
预期输出:
0===={0:{'aaa':1}}
1===={0:{'aaa':1},1:{'aaa':1,'bbb':1}}
实际输出:
0===={0:{'aaa':1,'bbb':1}}
1===={0:{'aaa':1,'bbb':1}}
有人可以解释一下这种行为的原因。我应该采用哪些改变来获得预期的输出。
答案 0 :(得分:1)
你通过dic
的全局来获得任何东西。您的代码中有一个dic
,并且您将其添加到mem_dic
两次。如果您想在mem_dic
中使用两个词组,请不要两次添加相同的词典。
mem_dic = {}
def set_op(ind, data):
global mem_dic
key, value = data.split()
dic = { key: int(value) } # a new dictionary
mem_dic[ind] = dic
print(ind, "====", mem_dic)
>>> set_op(0, 'aaa 1')
0 ==== {0: {'aaa': 1}}
>>> set_op(1, 'bbb 2')
1 ==== {0: {'aaa': 1}, 1: {'bbb': 2}}
答案 1 :(得分:1)
通过更改此行来创建字典的新实例
mem_dic[ind] = dict(dic)
dic = {}
mem_dic = {}
def set_op(ind, data):
global dic, mem_dic
key, value = data.split()
dic[key] = int(value)
mem_dic[ind] = dict(dic)
print(ind, "====", mem_dic)
set_op(0, 'aaa 1')
set_op(1, 'bbb 2')
输出
(1,'====',{0:{'aaa':1},1:{'aaa':1,'bbb':2}})