Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的清单上会出现这种奇怪的事情?_Python_List - Fatal编程技术网

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]
设置为不同的对象。