我有一张名为MyList的名单。
我想将列表复制到一个新列表中,然后向新列表中添加项目,因此我执行以下操作:
MySecondList=MyList
for item in MyList:
if item==2:
MySecondList.append(item)
我遇到的问题是,这些项也将被添加到MyList中,事实上,循环也会不断地遍历MyList中的新项!!你知道吗
这正常吗?为什么会这样?迭代是否应该只使用原始列表MyList,而不是随着我添加到other列表的项的增加而增加?你知道吗
Tags:
是的,这是正常的,因为列表在python中是可变的,此操作:
只需创建对同一列表对象的新引用,并
list.append
就地修改同一对象(其他操作,如+=
、list.extend
、list.pop
等也会就地修改列表)您可以在此处使用浅拷贝:
演示:
对于列表列表(或可变对象列表)而言,浅表副本是不够的,因为内部列表(或对象)只是对同一对象的新引用:
对于这种情况,使用
copy.deepcopy
:因为它们都引用相同的列表(并且它们的id是相同的)。观察:
请改为:
它的作用是复制一个列表,而不会改变原来的列表。也可以使用
list(MyList)
。你知道吗相关问题 更多 >
编程相关推荐