我对Python和Numpy相当陌生,当我将一个MATLAB程序翻译成Python时遇到了这个问题。Python函数不应该改变一个全局变量
据我所知,下面的代码通过修改一个全局变量来表现异常,即使它不应该。
import numpy as np
A = np.matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
def function(B):
B[1,1] = B[1,1]/2
return B
C = function(A)
print(A)
的输出是:
[[0 1 2]
[3 2 5]
[6 7 8]]
函数除以二的矩阵的中间数,并返回它。但它似乎也在改变全球变量。
在这里,这个问题可以很容易地避免,但我想明白为什么会出现。
对于一些原因,这并不如果函数通过2.
import numpy as np
A = np.matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
def function(B):
B = B/2
return B
C = function(A)
print(A)
将整个基质发生的输出是:
[[0 1 2]
[3 4 5]
[6 7 8]]
这对我没有意义。该函数返回它,所以它必须是一些东西。我认为关键是'B/2'是一个新的对象。作为输入给出的对象不会改变。 – Pynchia
@Pynchia也许我没说得好。我的意思是,将B分配给指向函数主体中不同对象的事实不会导致传递的参数(问题中的A)也指向不同的对象。当本地作用域消失时,对本地作用域所做的任何更改都会消失。 –