</pre><pre name="code" class="python">L = []
s = [0,0,0]
for i in range(3):
L.append(s)
L[1][1]=1
print L
如上代码,定义一个空list,添加元素也为list类型。本意是想改变list L中一个值,使其结果为[[0,0,0],[0,1,0],[0,0,0]],但运行的结构下图所示,将list L中的所有元素都改变了。
为找到原因,查看python的官方网站https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange,找到原因。如下图
list s 的值并没被copy到L中,L中的元素只是s的一个引用,且每个值都是指向s,所以改变一个值,会改变所有的值。
为了得到结构,本人使用了深度复制,将要修改的元素复制出来,修改后在复制回去。代码和结构如下
import copy
L = []
s = [0,0,0]
for i in range(3):
L.append(s)
m = copy.deepcopy(L[1])
m[1]=1
L[1]=m
print L
本文如果有不对和可以改进的地方,希望可以读者可以提出。特别是如果有更简便的方法,希望可以告知,一起学习