这是怎么回事?似乎阵列的id位置没有保持稳定也许?即使ID相同,is操作员仍返回False。然后在打印数组之后,元素的id会发生变化。有什么解释吗?在
import numpy as np
a = np.arange(27)
b = a[1:5]
a[0] is b[1] #False
id(a[0]) #40038736L
id(b[1]) #40038736L
a #prints the array
id(b[1]) #40038712L
id(a[0]) #40038712L
b[0] #1
a[1] #1
id(b[0]) #40038712L
id(a[1]) #40038784L
第一个测试列表:
后来我试过了
^{pr2}$因此
a[1]
中的对象始终是整数1
(整数的id
有点棘手,并且依赖于实现)。在但是使用数组:
id
完全不同;事实上,它们会随着每次访问而变化:这是因为
aa[1]
不仅仅是一个整数1
。它是一个np.int32
对象。在与列表不同,数组的值以字节的形式存储在
databuffer
中。b[1:]
是一个view
,访问同一个数据缓冲区。但是a[1]
是一个新对象,它包含对该数据缓冲区的引用。与list case相反,a[1]
不是a
中的第二个对象。在一般来说,}(用于浮动)。在
id
在处理数组时是没有用的,is
测试也没有用。使用==
或{==============
查看
aa
值存储位置的方法是:这两个数组的
data
指针是相关的,因为ba
是一个view
。在aa[1]
类似数组,也有数据缓冲区,但它不是视图。在相关问题 更多 >
编程相关推荐