Kie*_*unt 1 python dictionary numpy variable-assignment
我最近将某些代码中的错误减少为以下行为的结果:
>>> arr = np.zeros(10)
>>> value = 0
>>> dictionary = {"key":[arr,value]}
>>> dictionary["key"][0]
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> dictionary["key"][1]
0
>>> dictionary["key"][0]+=1
>>> dictionary["key"][1]+=1
>>> dictionary["key"][0]
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> dictionary["key"][1]
1
>>> arr
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> value
0
Run Code Online (Sandbox Code Playgroud)
导致:
>>> dictionary["key"][0] is arr
True
>>> dictionary["key"][1] is value
False
Run Code Online (Sandbox Code Playgroud)
可能是一个愚蠢的问题,但是是什么导致了这个?
对于numpy数组,您具有与名称和字典内分配的相同对象arr.因此,当您修改它时,您会看到两者都发生了更改,它们毕竟是同一个对象,并且numpy数组是可变的.
对于整数,当你dictionary["key"][1]+=1在字典中创建一个新的整数时,这是因为整数是不可变的 [1].这意味着两个整数(value和dictionary["key"][1])是不同的对象,因此一个被修改但另一个不是.
[1]它可能看起来像是x = 2; x += 1在同一个对象上运行,毕竟+=应该进行"就地"操作,但这不是因为不变性.在幕后,您实际上是在重新绑定x一个新的整数对象,因此它们具有相同的名称,但它们是不同的对象.