Python中列表赋值后修改新列表影响原列表的问题及解决方法
Python列表赋值后修改新列表导致原列表变化的解决方法
问题原因
在Python中,列表属于可变对象。执行new = example时,并没有创建新的列表,只是让变量new和example指向内存中同一个列表对象。因此修改new的元素,本质上是修改这个共享的列表对象,原列表example自然也会跟着变化。而整数、字符串这类不可变对象,赋值时会生成新对象,所以不会出现这种问题。
原问题代码
example = [1, 2, 3, 4, 5] new = example new[3] = 6 print(example) # 输出 [1, 2, 3, 6, 5]
解决方法
要避免这种情况,需要创建列表的独立副本,而非共享引用,以下是几种常用方式:
切片操作(最简单的方式):
example = [1, 2, 3, 4, 5] new = example[:] # 切片获取整个列表的副本 new[3] = 6 print(example) # 输出 [1, 2, 3, 4, 5] print(new) # 输出 [1, 2, 3, 6, 5]list()构造器:example = [1, 2, 3, 4, 5] new = list(example) new[3] = 6 print(example) # 输出 [1, 2, 3, 4, 5]copy模块的copy()方法(意图更明确):import copy example = [1, 2, 3, 4, 5] new = copy.copy(example) new[3] = 6 print(example) # 输出 [1, 2, 3, 4, 5]
注意:如果列表包含嵌套的可变对象(如列表嵌套列表),需要使用
copy.deepcopy()进行深拷贝,否则嵌套的可变对象仍会共享引用。
内容的提问来源于stack exchange,提问作者WBruh
相关产品推荐
相关产品推荐

