<p>当你编码的时候</p>
<pre><code>`list = obj.getLog()`
</code></pre>
<p>(忽略——只是一秒钟——使用隐藏的标识符是多么可怕的想法!!!)你的意思是:“make name <code>list</code>引用<code>obj.getLog()</code>返回的完全相同的对象”—正如我们从<code>class a</code>的代码中知道的那样,<code>obj.log</code>。当然,既然现在你有一个列表对象有两个名称,当你通过<strong>其中一个</strong>名称来改变这个对象,所有的改变都会从这两个名称中完全可见,当然,记住,<em>就是</em>只是<strong>一个</strong>对象,你只是在为它使用多个名称!你从来没有要求拷贝,所以Python当然没有拷贝。在</p>
<p>当你想要一份副本而不是原件时,<strong>要一份</strong>!当您知道您需要的类型(这里是一个列表)时,最好的方法是调用该类型,即:</p>
^{pr2}$
<p>当然,如果你选择用你的标识符践踏所有的内置函数——这就是为什么这样的标识符选择是一个<strong>坏的</strong>想法的一个很好的部分(我再强调也不为过:很难想出比这样的命名更差的样式选择,在你的Python编码中使用)。因此,我已经将标识符重命名为<code>mylist</code>(当然,您需要在两个<code>print</code>语句中重命名它)。在</p>
<p>当然,<strong>可以</strong>使用高度不可读或较慢的方法来弥补对内置标识符<code>list</code>正常功能的肆意破坏——例如:</p>
<pre><code>import copy
list = copy.copy(obj.getLog()) # somewhat slower
</code></pre>
<p>或者</p>
<pre><code>list = obj.getLog()[:] # traditional, but ECCH
</code></pre>
<p>或者</p>
<pre><code>temp = obj.getLog()
list = type(temp)(temp) # abstruse
</code></pre>
<p>但是,到目前为止,<strong>最简单、最干净、最受推荐的方法是<strong>不要</strong>将标识符命名为Python内置的标识符(这也是一个不错的主意,避免像标准Python库中的模块一样命名它们,原因类似,尽管有点弱)。在</p>