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

Python 从一个列表中删除类,而不从其他列表中删除它,python,list,class,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

我有一段代码,它做了一件与我认为应该做的不同的事情。这是我构建的一个模块,用于在更大的代码段中测试此问题:

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
10
删除的项目
删除的项目
删除的项目
删除的项目
删除的项目
5.
5.

为什么它也从plant1中删除项目,而不从plant1中删除项目?如何阻止它这样做?

您的代码的相关部分如下:

plant1 = plants[0]
plants1 = plants
plant1
现在指的是
plants
第一个索引处的对象,即使它已从
plants
中删除,它仍将指向同一个对象。您仍然只有一个对象,而不是两个重复对象

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


真的,你需要看看这个。

你需要复制列表
plants1=plants[:]
或者使用
.copy()
,它也适用于dicts。@PadraicCchanningham的答案肯定是类似的,但尽管这是一个关于重复的问题,但不一定是重复的问题!非常感谢。我在那里的代码做了什么使它这样做?@dsclose:这肯定是个骗局;另一篇文章回答了这个问题。