python变量问题

时间:2018-02-27 17:46:38

标签: python dictionary

任何人都可以帮忙解释为什么使用'append'时字典中的值会发生变化。

dic1 = {1:[[1],[2]]}
for x in dic1.keys():
    for tt in dic1[x]:
        print tt
        tt = tt + [1]
        print tt
dic1

输出:

[1]
[1, 1]
[2]
[2, 1]
Out[67]:
{1: [[1], [2]]}

然而

dic1 = {1:[[1],[2]]}
for x in dic1.keys():
    for tt in dic1[x]:
        print tt
        tt.append("s")
        print tt
dic1

输出 - 如果使用append而不是plus,则更改了dic1

[1]
[1, 's']
[2]
[2, 's']
Out[68]:
{1: [[1, 's'], [2, 's']]}

3 个答案:

答案 0 :(得分:1)

这是因为tt中的tt = tt + [1]是本地名称,而不是dic1内的名称。因此,您更改了此本地名称的值,而不是dic1

中的值

如果您想像在第一个解决方案中那样修改对象本身,请使用tt[:]

dic1 = {1:[[1],[2]]}
for x in dic1.keys():
    for tt in dic1[x]:
        print tt
        tt[:] = tt + [1]
        print tt

答案 1 :(得分:0)

这是因为列表是可变的,append更改了对象本身而不是创建新对象。

在第一种情况下,+实际上创建了一个新对象,因此字典中的原始tt不会被更改。

但是在第二种情况下,append会修改实际字典的tt

答案 2 :(得分:0)

Append将列表视为可变,而add不是。

list = [1,2,3]
print(id(list))
list.append(1)
print(id(list))
list = list + [1]
print(id(list))

换句话说,append不会在内存中创建一个新对象,它只是修改已经存在的对象,而addition会创建一个全新的对象。在字典的上下文中,这意味着当使用append时,其中的值会被更改。