今天我遇到了一个关于 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 到。
关于Python 列表 append 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36778970/