python 数组、序列和迭代融合的一个细节小问题

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]:importcopy
In[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}]
采用深复制解决问题
一只甜甜圈
浏览 397回答 2
2回答

长风秋雁

因为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}]

交互式爱情

>>>map(lambdax:{'id':x},range(3))[{'id':0},{'id':1},{'id':2}]>>>这个是你想要的吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript