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

Python中如何避免列表可变性?修改列表b时如何保持列表a不变?

问题:修改列表b时如何保持列表a不被同步改动?

在Python中执行以下代码时,修改列表b会导致列表a同步更改,请问有没有办法修改b的同时让a保持不变?

a = [1,2,3]
b = a
print(a)
print(b)
b[0]=100
print(a)
print(b)

输出结果:

[1, 2, 3]
[1, 2, 3]
[100, 2, 3]
[100, 2, 3]
解决方案

当然有办法啦!问题的根源在于b = a只是让b和a指向了同一个列表对象,并不是创建了一个新的列表副本。下面几种方法都能帮你创建真正独立的列表:

  • 方法1:使用切片操作创建副本
    切片[:]会返回原列表的一个浅拷贝,这样b就成了新的列表对象,和a完全独立。示例代码:

    a = [1,2,3]
    b = a[:]  # 用切片创建副本
    b[0] = 100
    print(a)  # 输出 [1, 2, 3]
    print(b)  # 输出 [100, 2, 3]
    
  • 方法2:使用list()构造函数
    把原列表传入list()函数,也会生成一个新的列表副本:

    a = [1,2,3]
    b = list(a)
    b[0] = 100
    print(a)  # 输出 [1, 2, 3]
    print(b)  # 输出 [100, 2, 3]
    
  • 方法3:使用copy模块的拷贝方法
    Python的copy模块提供了专门的拷贝工具,浅拷贝用copy.copy();如果你的列表里包含嵌套的可变对象(比如子列表、字典),还可以用copy.deepcopy()来创建完全独立的深拷贝:

    import copy
    a = [1,2,3]
    b = copy.copy(a)  # 浅拷贝
    # 若列表含嵌套元素,比如a = [1, [2,3]],则用copy.deepcopy(a)
    b[0] = 100
    print(a)  # 输出 [1, 2, 3]
    print(b)  # 输出 [100, 2, 3]
    

需要注意:如果列表里有嵌套的可变元素,浅拷贝只能复制外层列表,子元素还是会和原列表共享,这时候就必须用深拷贝来实现完全隔离。

内容的提问来源于stack exchange,提问作者navarone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:54