从一个列表中删除类而不从其他列表中删除它

时间:2014-09-20 09:25:40

标签: python list class

我有一段代码,它对我认为应该做的事情做了不同的事情。这是我为在大量代码中测试此问题而构建的模块:

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

为什么它也会从植物1中删除项目,而不是从植物1中删除?我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您的代码的相关部分在这里:

plant1 = plants[0]
plants1 = plants

plant1现在引用plants的第一个索引处的对象,即使它从plants中删除,它仍会指向同一个对象。你仍然只有一个对象,而不是两个重复。

同样,plantsplants1引用相同的列表。您没有通过将列表分配给另一个来复制列表。因此,您对plants1所做的任何操作也都默认为plants

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