在 jupyter notebook 中发布对变量的理解修改

Issue understanding modification of variable in jupyter notebook

我是 jupyter 的新手,只是不知道它是如何工作的:

对于这3个代码块,第3个代码块的多次执行使n递增,即[1,2],然后是[1,3],[1,4],等等

n = [1,2]

--

def fonction(x): 
  y=x
  y[1]=x[1]+1
  return y

--

res = fonction(n)
print(res)

这是我可以提供的最小示例。我不明白为什么变量 n 被修改了,尽管它只是第三个块中的参数(第二个块没有修改函数的参数!)

非常感谢您耐心的给这位老工程师讲解101 jupyter,真心的

由于您在 fonction 内部编写 y = x,因此没有为 y 提供 x 中包含的值,而是使 y 指向 x。在这种情况下 y 指向 xx 指向 n (通过 fonction 的输入)因此 y[1] = 将分配一个值到存储在 y 指向的位置的变量...因为 y 指向与 n 相同的位置,它会更改该列表。这意味着当您再次引用 n 时,它仍然指向同一个列表,但是该列表已通过 y[1] = x[1] + 1.

进行了修改

您可以使用 y = x[:] 解决此问题,这将为 y 创建一个全新的列表,这样它就不会指向存储在 n.[=29 中的列表=]

这可以像这样应用于您的代码:

def fonction(x): 
  y=x[:] #notice the change here
  y[1]=x[1]+1
  return y