Python的传参过程的小细节
Python钟所有的参数传递都是"按对象引用传递"。这意味着,对于不可变对象(如整数、字符串、元组),函数内修改形参不会影响实参,因为修改时会创建新对象;对于可变对象(如列表、字典、集合),函数内修改形参的内容会直接影响实参,因为操作的是同一对象。
由于上述性质,所以如果事先定义了一个变量(如np数组,类型为np.float32),将此变量赋值为一个函数的返回结果(例如函数内都是涉及到np.int32的运算),则返回结果为np.int32类型,且此变量的内存地址跟原先声明的变量的地址不一致。这一点与规则较严格的C++不同,需注意!
# C通过返回值的形式进行赋值
import numpy as np
def add():A = np.array([[100,200],[300,400]], dtype=np.int32)B = np.array([[100,200],[300,400]], dtype=np.int32)C = A + Breturn CC = np.ndarray((2,2),dtype=np.float32) # 此时C.dtype为np.float32, id(C)=1894631025520
C = add() # 此时C.dtype为np.int32, id(C)=1894631025040,此地址与函数内C=A+B的地址一致