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)
时,您将引用传递给子集。因此,每次执行此操作时,只需传递存储在
子集中的任何内容的引用,并且在执行打印操作时,所有子集都指向同一列表<代码>子集[:]
在追加时复制列表,就像值的冻结副本一样。