我主要用numpy做数据分析,对底层程序不太了解,所以这可能很明显。
我不明白通过简单地分配属性来设置属性与调用就地更改该属性的方法之间的区别。你可以同时做的例子是:
In [1]: import numpy as np
In [2]: a = np.array([[1, 2, 3],
...: [4, 5, 6]])
In [3]: a.shape
Out[3]: (2, 3)
In [4]: a.reshape(3,2)
Out[4]:
array([[1, 2],
[3, 4],
[5, 6]])
In [5]: a
Out[5]:
array([[1, 2, 3],
[4, 5, 6]])
In [6]: a.resize(3,2)
In [7]: a
Out[7]:
array([[1, 2],
[3, 4],
[5, 6]])
In [8]: a.shape = (6,)
In [9]: a
Out[9]: array([1, 2, 3, 4, 5, 6])
In [10]: a.__setattr__('shape',(3,2))
In [11]: a
Out[11]:
array([[1, 2],
[3, 4],
[5, 6]])
我不明白 input6
和8
. 显然,两者都更改了a.shape
适当的属性,而不是像在4
. 他们都只打电话a.__setattr__()
吗10
?如果是这样,为什么它们都存在?
(我知道a.resize()
有额外的容量来增加或减少分配的内存,但我在这里没有使用它——这种重复性是否只存在于该方法增加了一些其他容量?)