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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM