Skip to main content
 首页 » 编程设计

Python 列表 append 问题

2025年05月04日23txw1958

今天我遇到了一个关于 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 
[] 

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

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

名称设置正确,但 .append 将其 append 到 teams 的两个元素!

是什么原因造成的,我该如何解决?

请您参考如下方法:

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

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

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