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 copy
In [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}]
采用深复制解决问题
因为 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}]
>>> map(lambda x: {'id': x}, range(3))
[{'id': 0}, {'id': 1}, {'id': 2}]
>>>
这个是你想要的吗?