我有一段代码,它对我认为应该做的事情做了不同的事情。这是我为在大量代码中测试此问题而构建的模块:
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中删除?我该怎么做呢?
答案 0 :(得分:0)
您的代码的相关部分在这里:
plant1 = plants[0]
plants1 = plants
plant1
现在引用plants
的第一个索引处的对象,即使它从plants
中删除,它仍会指向同一个对象。你仍然只有一个对象,而不是两个重复。
同样,plants
和plants1
引用相同的列表。您没有通过将列表分配给另一个来复制列表。因此,您对plants1
所做的任何操作也都默认为plants
。
真的,你需要看看这个question on duplicating a list。