Python numpy ndarray内部';s属性
我正在使用Numpy v1.19。我发现一些Python numpy ndarray内部';s属性,python,numpy,Python,Numpy,我正在使用Numpy v1.19。我发现一些ndarray属性的id,例如shape和T,每次访问它们时都会发生变化 例如,id(a.T)和id(a.shape)会在下面的代码中产生不同的值 >>> import numpy as np >>> a = np.array(range(12)).reshape(3, 4) >>> id(a.T) 4510863728 >>> id(a.T) 4537092976 >>
ndarray
属性的id
,例如shape
和T
,每次访问它们时都会发生变化
例如,id(a.T)
和id(a.shape)
会在下面的代码中产生不同的值
>>> import numpy as np
>>> a = np.array(range(12)).reshape(3, 4)
>>> id(a.T)
4510863728
>>> id(a.T)
4537092976
>>> id(a.T)
4514908240
>>> id(a.shape)
4542374664
>>> id(a.shape)
4542475656
>>> id(a.shape)
4542515336
我不理解这一点,因为如果你定义一个类,它的属性是ndarray
或tuple
,那么id
永远不会改变。例如:
>>> class A:
... def __init__(self, tuple):
... self.tuple = tuple
...
>>> a = A((0, 1, 2))
>>> id(a.tuple)
4339273800
>>> id(a.tuple)
4339273800
>>> id(a.tuple)
4339273800
为什么这些事情发生在ndarray.shape
和ndarray.T
,而不是A.tuple
另外,我注意到,如果将它们定义为
@property
,则可能发生这些情况。它们是吗?这不是属性,但这些属性使用C级等价物a。Getset描述符在属性访问上运行任意代码,就像属性一样,并且这些属性的Getset描述符构造新对象