python值的传到
问题描述:
import numpy as np
def fill(a):
for i in range(a.shape[1]):
temp_col = a[:,i]
nan_num = np.count_nonzero(np.isnan(temp_col))
if nan_num != 0:
temp_not_nan_col = temp_col[temp_col == temp_col]
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
a[:,i] = temp_col
return a
if __name__ == "__main__":
a = np.arange(24).reshape(4, 6).astype(float)
a[1, 2:] = np.nan
print(a)
a = fill(a)
print(a)
上面是修改nan位置的值,请问第9行代码去了为什么a的值也改变了,没有第9行(a[:,i] = temp_col),都没对a做修改,但最后a的值也变了,很疑惑
答
第4行temp_col = a[:,i]并没有新申请内存,temp_col和a[:,i]指向同一存储地址,因此对temp_col的修改,其实就是对a的修改;
答
import numpy as np
a = np.arange(24).reshape(4, 6).astype(float)
temp_col = a[:,0]
temp_col = [1,1,1,1]
print(a)