求教python数组、序列与迭代综合应用问题,python数组,In [18]: dic


In [18]: dict = {'id':0}In [19]: q = []In [20]: for i in range(3):   ....:     q.append(dict)   ....:     q[i]['id'] = i   ....:     print q   ....:     [{'id': 0}][{'id': 1}, {'id': 1}][{'id': 2}, {'id': 2}, {'id': 2}]In [21]: print q[{'id': 2}, {'id': 2}, {'id': 2}]In [22]: 

我想的序列 q 最后应该是
[{'id': 0}, {'id': 1}, {'id': 2}]

为什么会得出[{'id': 2}, {'id': 2}, {'id': 2}]? 求解释啊


自己的欠缺啊,对象传参是对 对象的引用

In [5]: import copyIn [6]: dict = {'id' : 1}In [7]: list = []In [8]: for i in range(3):   ...:     list.append(copy.deepcopy(dict))   ...:     list[i]['id'] = i   ...:     print list   ...:     [{'id': 0}][{'id': 0}, {'id': 1}][{'id': 0}, {'id': 1}, {'id': 2}]

采用深复制解决问题

>>> map(lambda x: {'id': x}, range(3))[{'id': 0}, {'id': 1}, {'id': 2}]>>>

这个是你想要的吗?

因为 dict 在 q 只是一个引用. 所以 q 中的所有元素, 都是一样的, 你改变其中一个, 所有的都改变了.

最简单的改法:

>>> q = []>>> for i in range(3):...     q.append({'id':0})...     q[i]['id'] = i...     print q...[{'id': 0}][{'id': 0}, {'id': 1}][{'id': 0}, {'id': 1}, {'id': 2}]>>> q[{'id': 0}, {'id': 1}, {'id': 2}]

编橙之家文章,

评论关闭