[英]Values of variables inside a for-loop
我有一个数组a
for循环以外定义。 b
是分配为等于变量a
循环内。 我在循环内更改b
的值,这也会更改a
。 为什么/如何发生?
>>> import numpy as np
>>> a = np.asarray(range(10))
>>> for i in range(5,7):
b = a #assign b to be equal to a
b[b<i]=0 #alter b
b[b>=i]=1
print a
输出:
[0 0 0 0 0 1 1 1 1 1] #Unexpected!!
[0 0 0 0 0 0 0 0 0 0]
为什么是a
改变的时候,我不明确为什么这么做?
因为当您执行b = a
仅引用被复制。 a
和b
指向同一个对象。
如果你真的想创建的副本a
你需要,例如做:
import copy
...
b = copy.deepcopy(a)
numpy.asarray
是可变的,因此a
和b
指向一个位置。
>>> a = [1,2,3]
>>> b = a
>>> id(a)
140435835060736
>>> id(b)
140435835060736
您可以像这样修复b = a[:]
或b = copy.deepcopy(a)
id
返回对象的“ 身份 ”。
使用切片运算符进行复制。 =
只是在复制引用时给它另一个名称。
b = a[:]
将正常工作。
根据@AshwiniChaudhary的评论,这不适用于Numpy数组,这种情况下的解决方案是
b = copy.deepcopy(a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.