Python 错误:是否每次重复for循环时都有嵌套列表行为?
鉴于此代码:Python 错误:是否每次重复for循环时都有嵌套列表行为?,python,python-2.7,Python,Python 2.7,鉴于此代码: import random plusMin = [1000, -47, 1000, -250, 1015, -63, 1000, -563] masterList = [] subset = [-125, 375, 250, 250] for item in plusMin: if item > 0: masterList.append(subset) subset.append(1) else: mast
import random
plusMin = [1000, -47, 1000, -250, 1015, -63, 1000, -563]
masterList = []
subset = [-125, 375, 250, 250]
for item in plusMin:
if item > 0:
masterList.append(subset)
subset.append(1)
else:
masterList.append(item)
print masterList
下面的输出不应该吗
[125375 250,250,250],-47,[-125375,250,250,250,1],-250,[-125375,250,250,250,1,1],-63,[-125375,250,250,1,1,1],-563]
…在每次重复for循环时向子集追加一个“1”
相反,我得到的输出是:
[[-125375、250、250、1、1、1、1、1]、-47、[-125375、250、250、1、1、1]、-250、[-125375、250、250、1、1、1、1、1、1]、-63、[-125375、250、250、1、1、1]、-563]
这看起来像嵌套for循环的输出。到底为什么在for循环的第一个项的子集合末尾加上四个“1”
谢谢 你应该这样做
masterList.append(subset[:])
当您执行
masterList.append(subset)
操作时,您将传递对子集的引用。因此,每次执行此操作时,只需传递同一列表的多个引用,在执行打印时,所有的子集
计算为子集的最终值
subset[:]
在追加时复制列表 您每次都在添加对同一列表的引用。改为添加副本,请参阅副本。谢谢!这个很好用。我不太明白为什么这是有效的,而我的版本却没有。。。“值引用”是什么意思?当您执行masterList.append(subset)
时,您将引用传递给子集。因此,每次执行此操作时,只需传递存储在子集中的任何内容的引用,并且在执行打印操作时,所有子集都指向同一列表<代码>子集[:]
在追加时复制列表,就像值的冻结副本一样。