从一个列表中删除班级,而不从其他列表中删除它
问题描述:
我有一段代码,它与我认为应该做的事情不同。这是一个模块,我建在一块较大的代码来测试这个问题:从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的项目很好,但不?我该如何阻止它呢?你的代码的
答
Therelevant一部分是在这里:
plant1 = plants[0]
plants1 = plants
plant1
现指的plants
第一指数在里边反的对象,这将仍然指向,即使它从plants
删除了相同的对象。你仍然只有一个对象,而不是两个副本。
同样,plants
和plants1
指的是相同的列表。您没有通过将一个分配给另一个来复制您的列表。因此,您对plants1
所做的任何事情,您也在默认plants
。
真的,你需要看看这个question on duplicating a list。
你需要复制'plants1 = plants [:]' – 2014-09-20 09:31:10
的列表或使用'.copy()',它也适用于字典。 – simonzack 2014-09-20 09:33:05
@PadraicCunningham绝对相似的答案,但它是一个关于重复的问题,它不一定是重复的问题! – deau 2014-09-20 09:43:13