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

Python列表赋值后原变量随新变量改变的原因及解决方法

问题分析与解决

先看你给出的代码:

a = [1,2,4]
b=a
b.insert(1,45)
print(a,b)

运行结果里a和b同时被修改,具体原因和解决方法如下:

为什么修改b会影响a?

在Python中,列表属于可变引用类型。当你执行b = a时,并没有复制a指向的列表内容,而是让变量b和a指向了内存中同一个列表对象。这就像两个人拿着同一把钥匙开同一扇门,不管谁进去修改屋里的东西,另一个人看到的结果都是修改后的样子。所以用b.insert()操作的是这个共享的列表,a自然也会跟着变化。

如何让修改b不影响a?

你需要创建原列表的独立副本,让b指向这个新的列表对象,常用方法有这几种:

1. 切片复制

利用列表切片[:]生成新列表,这是最常用的浅拷贝方式:

a = [1,2,4]
b = a[:]  # 生成原列表的副本
b.insert(1,45)
print(a,b)  # 输出: [1, 2, 4] [1, 45, 2, 4]

2. 使用list()构造函数

把原列表传入list(),会返回一个新的列表对象:

a = [1,2,4]
b = list(a)
b.insert(1,45)
print(a,b)

3. 使用copy模块的浅拷贝

如果需要更明确的拷贝操作,可以用copy模块的copy()方法:

import copy
a = [1,2,4]
b = copy.copy(a)
b.insert(1,45)
print(a,b)

4. 深拷贝(针对嵌套列表)

如果你的列表里包含其他可变对象(比如嵌套列表),浅拷贝只会复制外层对象,内部对象还是共享的,这时候需要用deepcopy():

import copy
a = [1, [2, 4]]
b = copy.deepcopy(a)
b[1].append(6)
print(a,b)  # 输出: [1, [2, 4]] [1, [2, 4, 6]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:25:22