为什么共享python字典属性

时间:2018-01-24 08:45:31

标签: python dictionary

我是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}}

有人可以解释一下这种行为的原因。我应该采用哪些改变来获得预期的输出。

2 个答案:

答案 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}})