为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2019-04-08 11:18:41
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}]
                            
查看完整回答
反对 回复 2019-04-08
?
交互式爱情

TA贡献1712条经验 获得超3个赞

>>>map(lambdax:{'id':x},range(3))
[{'id':0},{'id':1},{'id':2}]
>>>
这个是你想要的吗?
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 396 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信