Python 列表追加问题

问题描述 投票:0回答:2

今天我在添加 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
的两个元素!

造成此问题的原因是什么以及如何解决此问题?

python list append
2个回答
12
投票

原因是在类定义中,

squad
name
是类变量,而不是实例变量。当初始化一个新的
player
对象时,它本质上是在播放器的所有实例中共享相同的
squad
变量。相反,您希望为
__init__
类定义一个
player
方法,显式分隔特定于实例的变量。

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

然后,当您初始化新的

player
对象时,它就有自己的
squad
变量。您的代码的其余部分现在应该可以正常工作,只需附加正确的对象的
squad


0
投票

这是完整的代码[正确的]

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

teams = []
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)
© www.soinside.com 2019 - 2024. All rights reserved.