Python 为什么我的清单上会出现这种奇怪的事情?
我有一个列表,我希望遍历列表中的反向元素,并使用前一个元素更改每个元素,直到第一个元素:Python 为什么我的清单上会出现这种奇怪的事情?,python,list,Python,List,我有一个列表,我希望遍历列表中的反向元素,并使用前一个元素更改每个元素,直到第一个元素: lst = [[1,2], [1,3], [1,4], [2,4]] for i in range(len(lst) - 1, 0, -1): lst[i] = lst[i-1] lst[0][0] += 1 之后,这就是我所期望的结果: >>> lst [[2, 2], [1, 2], [1, 3], [1, 4]] >>> lst [[1, 2], [1
lst = [[1,2], [1,3], [1,4], [2,4]]
for i in range(len(lst) - 1, 0, -1):
lst[i] = lst[i-1]
lst[0][0] += 1
之后,这就是我所期望的结果:
>>> lst
[[2, 2], [1, 2], [1, 3], [1, 4]]
>>> lst
[[1, 2], [1, 2], [2, 3], [2, 4]]
但结果是:
>>> lst
[[2, 2], [2, 2], [1, 3], [1, 4]]
当您将两个列表分配给其他元素时,我听到了一些关于在两个列表之间引用的信息,但问题是为什么其他元素不会出现这种结果,例如:
lst = [[1,2], [1,3], [1,4], [2,4]]
for i in range(len(lst) - 1, 0, -1):
lst[i] = lst[i-1]
lst[2][0] += 1
这是一个结果:
>>> lst
[[1, 2], [1, 2], [2, 3], [1, 4]]
我所期望的是:
>>> lst
[[2, 2], [1, 2], [1, 3], [1, 4]]
>>> lst
[[1, 2], [1, 2], [2, 3], [2, 4]]
为什么在
lst[2]
和lst[3]
之间没有任何引用?让我们给您的子列表单独命名,这样您的列表最初是
lst = [a, b, c, d]
现在执行此循环:
for i in range(len(lst) - 1, 0, -1):
lst[i] = lst[i-1]
在每一步中,您都会得到:
# lst[3] = lst[2]
[a, b, c, c]
# lst[2] = lst[1]
[a, b, b, c]
# lst[1] = lst[0]
[a, a, b, c]
现在,你在
lst[0]
和lst[1]
中看到了相同的对象,因此当你在lst[0]
中进行更改时,你会在lst[1]
中看到相同的更改,你说你从第二个代码段中得到了[[1,2],[2,2],[1,3],[1,4]
,但是,你把lst[0]
中的列表放在
而您没有将lst[0]
重新分配给其他对象。@khelwood对不起,问题已经编辑好了,但是,如果我对lst[2]进行更改,为什么lst[3]不会更改?因为lst[2]
和lst[3]
是不同的对象(b
和c
)?我以前分配过lst[2]和lst[3]。它们不是同样的对象吗?不是,因为您随后将lst[2]
设置为不同的对象。