关于python中对np.array数据进行元素操作的讨论(形参与实参)

发布时间 2023-07-28 10:53:43作者: xiaoxiao_sjtu

最近发现了python中,如果将np.array(ndarray)类型的数据作为实参,传递给形参时,实参和形参会同时改变。

例如下面的代码:

import numpy as np
num=np.array([[1,2],[3,4]])
def test(a):
    a[0,1] = 9
    print(a)
test(num)
print(num)
输出结果:

[[1 9]
[3 4]]

[[1 9]
[3 4]]
会发现实参num和形参a都发生了改变。这就很奇怪了,超出了我的认知。

调研了一下,发现是【可变数据类型】和【不可变数据类型】的关系

在 Python 中,数据类型可以分为可变(Mutable)和不可变(Immutable)两种类型。可变数据类型指的是对象在创建后可以修改其内容,而不改变其标识(在内存中的位置)。不可变数据类型则是指对象一旦创建后,其内容就不能再被修改,如果需要修改,只能创建一个新的对象。

需要注意的是,Python 中的整数和字符串等简单数据类型是不可变的,而像列表、字典和NumPy数组这样的复杂数据类型是可变的。