未(直接)引用时会附加Python列表

时间:2018-10-03 13:24:10

标签: python python-3.x list

好的,这只是我尝试进行Guess Who(TM)进行课堂挑战时编写的一小段代码,我想制作一个随机字符生成器函数(它仅是概念证明,我将对其进行扩展)以后再复杂!请不要判断!)。但是,角色的模板功能列表似乎在每次迭代时都附加了(因此使我的其他循环倾斜)。它应该在每个新生成的列表的末尾添加一个项目-而不是模板。但是模板变量未附加在代码中,仅/应该是临时副本。这是代码:

tempfeatures = characters = []
for i in range(len(characternames)):
    tempfeatures = []
    charactername = characternames[random.randint(0,len(characternames)-1)]
    characternames.remove(charactername)
    a = features
    tempfeatures = a
    ### "Debug bit" ###
    print(features)
    print("loooooop")
    for y in range(len(features)):
        print(len(features))
        temp = random.randint(0,1)
        if temp == 1:
            tempfeatures[y][1] = True
        else:
            tempfeatures[y][1] = False
    tempfeatures.append(["Dead",True])
    characters.append([charactername,tempfeatures])
print(characters)

谢谢!

2 个答案:

答案 0 :(得分:0)

显然,温度特征变量是“按引用调用”而不是“按值调用”。 -谢谢python。

因此,在复制列表时,必须在变量名的末尾使用它

identity.AddClaim(new Claim(OpenIdConnectConstants.Claims.Subject, user.Username));

[:] 位)

感谢您的评论!

答案 1 :(得分:0)

这称为 shallow 副本,它只是将列表引用到另一个变量,如下所示: https://docs.python.org/2/library/copy.html
您需要按如下方式制作独立副本或副本:tempfeature = list(feature),因此更改tempfeature不会干扰feature