【发布时间】:2018-07-20 08:45:25
【问题描述】:
我在 for 循环中更改状态字典,并在每次迭代时将新状态附加到列表中。
在 Python 中,字典当然是可变的,所以添加到列表中的是对不断变化的字典对象的引用。所以最后我只得到一个相同重复引用的列表,指向状态的最终版本。
state = {'temp': 21.6, 'wind': 44.0}
state_list = []
for i in range(10):
state['temp'] += 0.5
state['wind'] -= 0.5
state_list.append(state)
有没有办法告诉解释器我希望“按值传递”?我能够从追加前的行中的状态构造一个元组或可变的东西,并用说元组附加列表。我只想检查这是最好的解决方案。
【问题讨论】:
-
没有。您必须明确复制。
-
“所以最后我只是得到一个相同重复引用的列表,指向状态的最终版本”实际上,列表中的所有元素 都是 相同 dict,句号。
标签: python pass-by-reference pass-by-value