任何人都可以帮忙解释为什么使用'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']]}
答案 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时,其中的值会被更改。