Python清空一个列表时另一个列表也被清空的原因及解决方法咨询
问题根因
Python中的列表是可变对象,你执行elements2 = elements这行代码时,并没有生成新的独立列表,只是给内存中同一个列表对象绑定了两个不同的变量名。因此你通过任意一个变量名修改列表内容(包括调用clear()方法清空),另一个变量访问到的都是同一个修改后的对象,这就是两个列表同步清空的原因。
解决方案
要让两个列表修改时互不影响,需要对原列表做拷贝操作,根据你的元素类型选择对应方案即可:
- 如果列表内的元素都是不可变类型(数字、字符串、元组等),用浅拷贝就足够:
可以任选以下一种写法创建elements2:# 切片语法 elements2 = elements[:] # list构造方法 elements2 = list(elements) # 列表自带copy方法 elements2 = elements.copy() - 如果列表内嵌套了其他可变对象(子列表、字典、自定义类实例等),需要完全独立修改则用深拷贝:
import copy elements2 = copy.deepcopy(elements)
按上述方法修改elements2的赋值逻辑后,再执行elements2.clear()就只会清空elements2本身,不会影响原elements列表的内容,后续函数的遍历逻辑也能正常运行。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

