Python numpy ndarray内部';s属性

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 >>

我正在使用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
>>> 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描述符构造新对象