有人告诉我这两个街区之间的区别吗?我很难弄清楚为什么第二个只在本地更改嵌套列表,而第一个更改全局。在我看来他们做同样的事情。
my_list = [ ]
new_list = [0, 0, 0 ]## outside the loop
for index in range(5):
my_list.append(new_list)
my_list[0][1] = 5
print(my_list)
## result
[[0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0]]
my_list = [ ]
for index in range(5):
new_list = [0, 0, 0 ] ## inside the loop
my_list.append(new_list)
my_list[0][1] = 5
print(my_list)
## result
[[0, 5, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
答案 0 :(得分:1)
因为在for
循环内,new_list
得到重新定义,所以每次迭代都会有效地引用不同的列表对象。
打印第二种情况的id
s显示:
print(*map(id, my_list)) # Notice the different ids
140609203176456 140609194670088 140609194608840 140609212158216 140609194670152
在循环外,您追加相同的列表对象,相同的引用。通过所有参考文献都可以看到变化。
在这种情况下打印id
s表示存在相同的id
(即相同的列表):
print(*map(id, my_list)) # same id.
140609194670088 140609194670088 140609194670088 140609194670088 140609194670088