2016-04-21 123 views
1

今天我遇到了python列表追加的奇怪問題。我試圖創建一個數組,其每個元素都像C struct。其中一個元素本身就是一個列表。這是有問題的代碼:Python列表追加問題

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 
[] 

由於我只加一個構件到squad爲團隊[0]。但輸出我得到的是:

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

名稱設置罰款,但.append它附加到teams兩個元素!

是什麼導致了這種情況,我該如何解決這個問題?

回答

11

原因是在你的類定義中,squadname是類變量,而不是實例變量。當一個新的player對象被初始化時,它基本上在玩家的所有實例中共享相同的squad變量。相反,您希望爲player類定義一個__init__方法,該方法明確分隔了特定於實例的變量。

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

然後,當你初始化你的新player對象,它有自己的squad變量。剩下的代碼現在應該可以正常工作,只有正確的對象squad被追加到。

+0

謝謝!這解決了問題! –