为什么Python中的元素…… in …:语句使用byValue行为?
我似乎无法在任何地方找到解释……
假设我有一个向量y初始化为全零: from numpy import * y = zeros(5) 它也可能是一个简单的python数组,我认为它不重要. 我注意到在y:语句中for x的行为是它在y中创建每个元素的副本,因此当你修改x时,它不会修改y. for x in y: x = 1 print y output : array([ 0.,0.,0.]) 我的问题如下:为什么会这样?我认为Python中的所有内容都是byReference,并且很少有byValue传递? 如何使用引用变量执行以下操作?执行以下操作似乎有效: for i in range(len(y)): y[i] = 2*rand()-1 但是根据我对Python的了解,这是错误的,我相信当我开始使用数千或数百万个值的向量时它会很慢. 我还能做什么? 解决方法
你可以替换这个:
y = np.zeros(5) for i in range(len(y)): y[i] = 2*rand()-1 有: y=2*np.random.rand(5)-1 如果y是Python序列(元组,列表,数组等)或Numpy数组, for y in y: 迭代y,将x设置为y中的每个元素. 如果元素是可变对象,例如列表,那么改变列表将影响y. 可以这样想:x是“指向”一个对象: y---> [o----o----o----o] ^ | x 编写赋值语句时: x += 1 现在,您将x重新分配给“指向”另一个对象: y---> [o----o----o----o] x---> o 另一方面,如果你使用x.append(1)改变列表,那么x仍指向同一个对象(例如列表),但您已经改变了该列表的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |