
正文
numpy 矩阵在作为函数参数传递时的奇怪点
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
numpy 矩阵在作为函数参数传递时的奇怪点
import numpy as npclass simpleNet:
def __init__(self):
self.W = np.array([1, 2, 3])def f(w):
w[1] = 100
w[0] = 1212
print(id(w))# 定义 test 对象打印其地址
test = simpleNet()
print(id(test.W))# 作为参数 传递给 f
f(test.W)print(test.W)
输出:

我们可以看到,这是一种引用的传递方式.
但如果将函数 f 修改为这样:
import numpy as npclass simpleNet:
def __init__(self):
self.W = np.array([1, 2, 3])def f(w):
w = w + 1
print(id(w))# 定义 test 对象打印其地址
test = simpleNet()
print(id(test.W))# 作为参数 传递给 f
f(test.W)print(test.W)
输出:

可以看到,此时传递的就是单纯地值的传递,因为 test.W 和 函数 f里的w地址是不一样的
此外我还惊讶地发现了这样的一个情况:
def f(w):
print("传递过来但未修改的w\t", id(w))
w = w + 1
print("传递过来但修改了的w\t", id(w))w = 5
print("刚创建的w\t\t\t", id(w))f(w)
输出:








