Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python字典属性是共享的_Python_Dictionary - Fatal编程技术网

为什么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

我是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}}
预期输出:

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上运行时得到的实际输出不匹配;不确定这是否是编辑后更改内容的产物,但这无助于你的问题。