擅长:python、mysql、java
<p>这是因为<code>foo2</code>保留了一个对<code>foo</code>的内部引用(它不是数组数据的所有者),因此它总共还有一个额外的引用。你知道吗</p>
<p>下一个代码</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import sys
foo1 = np.array([1,2,3])
foo2 = foo1.reshape(3,1)
print(sys.getrefcount(foo1), sys.getrefcount(foo2))
</code></pre>
<p>产生以下结果:</p>
<pre class="lang-sh prettyprint-override"><code>3 2
</code></pre>
<p>现在,测试这个:</p>
<pre class="lang-py prettyprint-override"><code>foo1 = np.array([1,2,3])
foo2 = foo1.reshape(3,1).copy()
print(sys.getrefcount(foo1), sys.getrefcount(foo2))
</code></pre>
<p>输出是:<code>2 2</code>,因为现在<code>foo2</code>在复制了<code>foo</code>内容之后有了自己的数据,<code>foo</code>的引用计数减少了。你知道吗</p>