Python附加在循环中工作

Python附加在循环中工作,python,Python,我在尝试填写循环列表时发现了一些神秘问题 下面是一个例子: >>> params = [1,2,3,4,5] >>> el = {'param':0} >>> el {'param': 0} >>> list = [] >>> for param in params: ... el['param'] = param ... list.append(el) ... >>>

我在尝试填写循环列表时发现了一些神秘问题

下面是一个例子:

>>> params = [1,2,3,4,5]
>>> el = {'param':0}
>>> el
{'param': 0}
>>> list = []
>>> for param in params:
...     el['param'] = param
...     list.append(el)
... 
>>> print(list)
[{'param': 5}, {'param': 5}, {'param': 5}, {'param': 5}, {'param': 5}]
>>> 
但我认为结果应该是

>>> print(list)
[{'param': 1}, {'param': 2}, {'param': 3}, {'param': 4}, {'param': 5}]
>>> 

如何解决这个问题?为什么真正的结果和我心目中的结果不一样呢

列表中的每个元素都包含对同一个目录的引用。这就是为什么您在每个元素中看到相同的数字。也许你想做:

params = [1,2,3,4,5]

a = []
for param in params:
    el = {'param': param}
    a.append(el)

另外,要小心使用变量名来隐藏内置项,如list。

列表中的每个元素都包含对同一dict的引用。这就是为什么在每个元素中都看到相同的数字。也许你想做:

params = [1,2,3,4,5]

a = []
for param in params:
    el = {'param': param}
    a.append(el)

另外,要小心使用变量名来隐藏内置项,例如list。

问题在于,列表中的每个条目都使用相同的字典。要解决此问题,请在for循环中的el['param']=param上方添加el={}。

问题在于,列表中的每个条目都使用相同的词典。若要解决此问题,请在for循环中的el['param']=param上方添加el={}。

el始终引用同一个字典,list.appendel会向列表中添加对该字典的引用,而不是其当前值的副本。您没有包含5个不同词典的列表,而是包含对一个词典的5个引用的列表

要更详细地了解正在发生的事情,请通过循环每次打印列表和el。您将看到一个不断增长的列表,它始终引用el的当前值。

el始终引用同一个字典,而list.appendel将对该字典的引用(而不是其当前值的副本)添加到列表中。您没有包含5个不同词典的列表,而是包含对一个词典的5个引用的列表


要更详细地了解正在发生的事情,请通过循环每次打印列表和el。您将看到一个不断增长的列表,该列表始终引用el的当前值。

您有一个要修改的dict对象。您多次在列表中添加对该dict的引用。因此,您的列表包含对同一dict对象的5个引用。

您有一个要修改的dict对象。您多次在列表中添加对该dict的引用。因此,您的列表包含对同一dict对象的5个引用。

您在每次迭代中修改同一dict并将其添加到列表中。将此目录的副本添加到列表时,您将得到另一个结果

只需调用list.appenddictel即可。

您可以在每次迭代中修改相同的dict并将其添加到列表中。将此目录的副本添加到列表时,您将得到另一个结果


只需调用list.appenddictel即可。

您的结果是正确的。el是一个字典,它在值参数上始终使用UoDate。您还在列表中存储对该词典的引用,因此是resultRead。您的结果是正确的。el是一个字典,它在值参数上始终使用UoDate。您还将此词典的引用存储在列表中,因此会产生结果。谢谢!但如果没有机会在每次迭代中创建新的el对象?我可以说python我想要的是值而不是引用吗?不。python只对引用有效。如果要复制该值,必须显式地创建新对象或使用复制方法。谢谢!但如果没有机会在每次迭代中创建新的el对象?我可以说python我想要的是值而不是引用吗?不。python只对引用有效。如果要复制该值,必须显式地创建新对象或使用copy方法