为什么嵌套列表的更改不影响第一层而只影响后续层?

Why does a change in nested list doesn't affect the first layers and only the subsequent layers?

我只是想知道我们如何得到下面的输出。下面给出的是Python代码:

x=[1,3,6,[18]]
y=list(x)
x[3][0]=15
x[1]=12
print(y)

输出为:

[1,3,6,[15]]

为什么 x[1]=12 没有在 列表中做任何更改 y?但是为什么x[3][0]=15改变了list y中的元素?能否对此做一个详细而简单的解释? 为什么???

假设每个元素都是一个变量:

x = [a,b,c,d] # 1,3,6,[18]

你将其复制为 y 所以你有

y = [a,b,c,d] # 1,3,6,[18]

当您执行 x[3][0] = 15 时,您正在更改 d 的第一个元素。请注意 d 仍然是变量 d,您更改了它的内容,但它在两个列表中仍然是相同的 d

现在你改变x

的第二个元素
x = [a,e,c,d] # 1,12,6,[15]

但是y仍然是

y = [a,b,c,d] # 1,3,6,[15]

编辑:添加一个非代码示例以使其更清晰

假设 x 是一个包含以下内容的列表:

  • 一篇论文说 1
  • 一篇论文说 3
  • 一篇论文说 look at that notebook over there, whatever's in there is my value

当您将 x 复制为 y 时,您有:

  • 一篇写着 1 的论文(副本)
  • 一篇写着 3 的论文(副本)
  • 一篇写着 look at that notebook over there, whatever's in there is my value 的论文(这是一份副本,但都引用了同一个笔记本)

当您 x[2][0] = 1 走到笔记本所在的位置并更改内容时,xy 仍然会告诉您转到同一个笔记本以了解其中的内容在那里,你没有更改第 3 篇论文,你按照它的说明更改了笔记本的内容

当你做 x[1] = 6 时,你正在用一张写着 6 的新论文更改 x 的第二个元素,但你没有更改 [=14] 中的那个=] 因为它是不同的论文(原件的副本)