<p>是的,这是正常的,因为列表在python中是可变的,此操作:</p>
<pre><code>MySecondList = MyList
</code></pre>
<p>只需创建对同一列表对象的新引用,并<code>list.append</code>就地修改同一对象(其他操作,如<code>+=</code>、<code>list.extend</code>、<code>list.pop</code>等也会就地修改列表)</p>
<p>您可以在此处使用浅拷贝:</p>
<pre><code>MySecondList = MyList[:]
</code></pre>
<p>演示:</p>
<pre><code>>>> from sys import getrefcount
>>> lis = [1,2,3]
>>> foo = lis #creates a new reference to the same object [1,2,3]
>>> lis is foo
True
>>> getrefcount(lis) #number of references to the same object
3 #foo , lis and shell itself
#you can modify the list [1,2,3] from any of it's references
>>> foo.append(4)
>>> lis.append(5)
>>> foo,lis
([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
>>> lis = [1,2,3]
>>> foo = lis[:] #assigns a shallow copy of lis to foo
>>> foo is lis
False
>>> getrefcount(lis) #still 2(lis + shell_, as foo points to a different object
2
#different results here
>>> foo.append(4)
>>> lis.append(5)
>>> foo, lis
([1, 2, 3, 4], [1, 2, 3, 5])
</code></pre>
<p>对于列表列表(或可变对象列表)而言,浅表副本是不够的,因为内部列表(或对象)只是对同一对象的新引用:</p>
<pre><code>>>> lis = [[1,2,3],[4,5,6]]
>>> foo = lis[:]
>>> foo is lis #lis and foo are different
False
>>> [id(x) for x in lis] #but inner lists are still same
[3056076428L, 3056076716L]
>>> [id(x) for x in foo] #same IDs of inner lists, i.e foo[0] is lis[0] == True
[3056076428L, 3056076716L]
>>> foo[0][0] = 100 # modifying one will affect the other as well
>>> lis[0],foo[0]
([100, 2, 3], [100, 2, 3])
</code></pre>
<p>对于这种情况,使用<code>copy.deepcopy</code>:</p>
<pre><code>>>> from copy import deepcopy
>>> lis = [[1,2,3],[4,5,6]]
>>> foo = deepcopy(lis)
</code></pre>