Python列表附加问题

时间:2016-04-21 19:38:48

标签: python list append

我遇到了一个相当奇怪的问题,今天附加了python列表。我试图创建一个数组,其中每个元素都像C struct。其中一个元素本身就是一个列表。这是有问题的代码:

class players:
    name='placeholder'
    squad=list()

teams=list()
teams.append(players())
teams.append(players())
teams[0].name="abc"
teams[1].name="xyz"
teams[0].squad.append("Joe")

for w in teams:
    print(w.name)
    print(w.squad)

我预期的输出是:

abc
['Joe']
xyz
[]

因为我只为团队[0]添加了squad成员。但我得到的输出是:

abc
['Joe']
xyz
['Joe']

名称设置正常但.append将其附加到teams的两个元素!

是什么导致这种情况以及如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

原因是在您的类定义中,squadname是类变量,而不是实例变量。初始化新的player对象时,它实际上是在播放器的所有实例中共享相同的squad变量。相反,您希望为__init__类定义一个player方法,该方法明确地分隔特定于实例的变量。

class players:
    def __init__(self):
        self.name = 'placeholder'
        self.squad = []

然后,当您初始化新的player对象时,它有自己的squad变量。其余的代码现在应该可以正常工作,只需要附加正确的对象squad