在 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
指向 x
而 x
指向 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
我是 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
指向 x
而 x
指向 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