为什么python字典属性是共享的
我是python新手。当我在玩代码的时候,我发现了这个 源代码:为什么python字典属性是共享的,python,dictionary,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
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}}
预期输出:
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}}
实际输出:
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}}
有人能解释一下这种行为的原因吗。以及我应该进行哪些更改以获得预期的输出。拥有
dic的全局设置不会带来任何好处。您的代码中有一个dic
,您将其添加到mem\u dic
两次。如果要在内存中添加两个dict,请不要将同一个dict添加两次
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)
拥有dic
的全局设置不会带来任何好处。您的代码中有一个dic
,您将其添加到mem\u dic
两次。如果要在内存中添加两个dict,请不要将同一个dict添加两次
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)
通过更改此行创建字典的新实例
mem\u dic[ind]=dic(dic)
输出
(1,,{0:{'aaa':1},1:{'aaa':1,'bbb':2})
通过更改此行创建字典的新实例
mem\u dic[ind]=dic(dic)
输出
(1,,{0:{'aaa':1},1:{'aaa':1,'bbb':2})
你能解释一下你想在这里做什么吗?@LutzHorn在这里我试图在迭代过程中跟踪字典中的变化注意,你声明的实际输出与我在python2.7上运行时得到的实际输出不匹配;不确定这是否是编辑后更改内容的产物,但这对你的问题没有帮助。你能解释一下你想在这里做什么吗?@LutzHorn在这里,我试图在迭代过程中跟踪字典中的变化注意,你声明的实际输出与我在python2.7上运行时得到的实际输出不匹配;不确定这是否是编辑后更改内容的产物,但这无助于你的问题。