cell={'num':0,'state':1}
cell_2d=[]
cell_list=[]
for i in range(2):
for j in range(2):
cell_list=cell_list+[cell]
cell_2d=cell_2d+[cell_list]
cell_list=[]
print "initially:"
print cell_2d
cell_2d[0][0]['num']=-1
print "finally:"
print cell_2d
获得的输出是:
最初: [[{'state':1,'num':0},{'state':1,'num':0}],[{'state':1,'num':0},{'state' :1,'num':0}]] 最后: [[{'state':1,'num': - 1},{'state':1,'num': - 1}],[{'state':1,'num': - 1},{ 'state':1,'num': - 1}]]
当执行第11行时,我希望只更改第一个cell_2d列表的第一个元素。但输出显示cell_2d的所有元素的所有'num'都更改为-1。无法理解这种情况发生的原因。有人可以告诉我代码的错误是什么?提前完成。
答案 0 :(得分:2)
cell
对象。因为Python使用引用,所以你只需要对同一个对象进行四次引用,所以当你更改一个引用时,你可以全部更改它们。
在内循环中,尝试:
cell_list = cell_list + [{'num':1, 'state':0}]
可以缩短为:
cell_list.append({'num':1, 'state':0})
或者,实际上,你可以用:
替换内部循环(用j)cell_list = [{'num':1, 'state':0} for j in range(2)]
答案 1 :(得分:0)
只需更换此行
即可cell_2d=cell_2d+[cell_list]
有了这个
cell_2d = cell_2d + [ cell_list.copy() ]
这样python就会从字典'cell_list'中复制而不是存储引用。