numpy 矩阵在作为函数参数传递时的奇怪点

numpy 矩阵在作为函数参数传递时的奇怪点

import numpy as np

class 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)

输出:

image-20210608152306319

我们可以看到,这是一种引用的传递方式.

但如果将函数 f 修改为这样:

import numpy as np

class 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)

输出:

image-20210608152508688

可以看到,此时传递的就是单纯地值的传递,因为 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)

输出:

image-20210608153044245

posted @ 2021-06-08 15:33  CuriosityWang  阅读(546)  评论(6编辑  收藏  举报