You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:37:39