容器变量返回的python3值错误

hua*_*eng 0 dictionary python-3.x

我遇到的代码未能达到我的期望。详细信息如下:

    a = ['name']
    b = [('name=cheng',),('name=huang',),('name=pan',)]
    Dict = {}
    c = []
    for i in range(0,3):
        for j in range(0,1):
            Dict[a[j]] = b[i][j]
            c.append(Dict)
    print(c)

>>> [{'name':'name=pan'},{'name':'name=pan'},{'name':'name=pan'}]
Run Code Online (Sandbox Code Playgroud)

i应该是什么

>>> [{'name':'name=cheng'},{'name':'name=huang'},{'name':'name=pan'}]
Run Code Online (Sandbox Code Playgroud)

那你能告诉我如何解决这个问题吗?

Syn*_*ica 5

您正在更改Dict 就地值,而不是每次都未创建新词典。循环的每次迭代都将Dict["name"]等于其中的一个元素b,然后将其附加到列表中。循环的下一次迭代将更改dict(意味着您附加到c的先前版本也将被更改)。结果是您的列表c中填充了在循环的最后一次迭代中创建的字典的3个精确副本(在内存中完全相同的位置)。

您如何解决这个问题?每次制作一本新字典。

a = ['name']
b = [('name=cheng',),('name=huang',),('name=pan',)]
c = []
for i in range(0,3):
    for j in range(0,1):
        temp_dict = {a[j]: b[i][j]} 
        c.append(temp_dict)
print(c)
Run Code Online (Sandbox Code Playgroud)

结果:

[{'name': 'name=cheng'}, {'name': 'name=huang'}, {'name': 'name=pan'}]
Run Code Online (Sandbox Code Playgroud)

  • +1-实际上,列表`c`具有_same_字典的3个引用。如果更新`Dict ['name'] = ...`,则所有3个都更新。 (2认同)