玩蛇网提供最新Python编程技术信息以及Python资源下载!

求教python数组、序列与迭代综合应用问题

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

采用深复制解决问题

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

这个是你想要的吗?

因为 dictq 只是一个引用. 所以 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}]

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19792.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月22日 - 11时19分19秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules