从一个列表中删除班级,而不从其他列表中删除它

问题描述:

我有一段代码,它与我认为应该做的事情不同。这是一个模块,我建在一块较大的代码来测试这个问题:从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

Therelevant一部分是在这里:

plant1 = plants[0] 
plants1 = plants 

plant1现指的plants第一指数在里边反的对象,这将仍然指向,即使它从plants删除了相同的对象。你仍然只有一个对象,而不是两个副本。

同样,plantsplants1指的是相同的列表。您没有通过将一个分配给另一个来复制您的列表。因此,您对plants1所做的任何事情,您也在默认plants

真的,你需要看看这个question on duplicating a list