2014-09-20 40 views
0

我有一段代碼,它與我認爲應該做的事情不同。這是一個模塊,我建在一塊較大的代碼來測試這個問題:從plant1從一個列表中刪除班級,而不從其他列表中刪除它

class plant: 
    def __init__ (self, param): 
     self.param = param 
plants = [] 
for i in range(10): 
    plants.append(plant(10)) 
plant1 = plants[0] 
plants1 = plants 
print(len(plants)) 
for i in plants: 
    print("Item removed") 
    plants.remove(i) 
print(plant1) 
print(len(plants)) 
print(len(plants1)) 

這將產生輸出

10 

Item removed 

Item removed 

Item removed 

Item removed 

Item removed 

<__main__.plant object at 0x02780F30> 

<__main__.plant object at 0x02780F30> 

5 
5 

爲什麼它刪除plants1的項目很好,但不?我該如何阻止它呢?你的代碼的

+0

你需要複製'plants1 = plants [:]' – 2014-09-20 09:31:10

+0

的列表或使用'.copy()',它也適用於字典。 – simonzack 2014-09-20 09:33:05

+0

@PadraicCunningham絕對相似的答案,但它是一個關於重複的問題,它不一定是重複的問題! – deau 2014-09-20 09:43:13

回答

0

Therelevant一部分是在這裏:

plant1 = plants[0] 
plants1 = plants 

plant1現指的plants第一指數在裏邊反的對象,這將仍然指向,即使它從plants刪除了相同的對象。你仍然只有一個對象,而不是兩個副本。

同樣,plantsplants1指的是相同的列表。您沒有通過將一個分配給另一個來複制您的列表。因此,您對plants1所做的任何事情,您也在默認plants

真的,你需要看看這個question on duplicating a list