In[18]:dict={'id':0}In[19]:q=[]In[20]:foriinrange(3):....:q.append(dict)....:q[i]['id']=i....:printq....:[{'id':0}][{'id':1},{'id':1}][{'id':2},{'id':2},{'id':2}]In[21]:printq[{'id':2},{'id':2},{'id':2}]In[22]:我想的序列q最后应该是[{'id':0},{'id':1},{'id':2}]为什么会得出[{'id':2},{'id':2},{'id':2}]?求解释啊自己的欠缺啊,对象传参是对对象的引用In[5]:importcopyIn[6]:dict={'id':1}In[7]:list=[]In[8]:foriinrange(3):...:list.append(copy.deepcopy(dict))...:list[i]['id']=i...:printlist...:[{'id':0}][{'id':0},{'id':1}][{'id':0},{'id':1},{'id':2}]采用深复制解决问题
2 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
因为dict在q只是一个引用.所以q中的所有元素,都是一样的,你改变其中一个,所有的都改变了.最简单的改法:>>>q=[]>>>foriinrange(3):...q.append({'id':0})...q[i]['id']=i...printq...[{'id':0}][{'id':0},{'id':1}][{'id':0},{'id':1},{'id':2}]>>>q[{'id':0},{'id':1},{'id':2}]
添加回答
举报
0/150
提交
取消