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

Python 3中数组赋值"="导致的关联修改问题及解决方案

为什么修改x会影响原列表some_array?

你的猜测完全正确——在Python中,列表属于可变对象,当执行x = some_array时,并没有复制整个列表内容,只是让变量x和some_array指向了内存中同一个列表对象。对可变对象的修改会直接作用在对象本身,所以不管通过哪个变量引用它,都会看到修改后的结果。

你可以用id()函数验证两者指向同一内存地址:

some_array = [1,2,3,4,5,6]
x = some_array
print(id(some_array))  # 输出某个内存地址
print(id(x))           # 输出和上面完全相同的地址

如何避免这种情况?

要让x成为独立的列表,你需要创建原列表的副本,常用方法有以下几种:

1. 切片法(最常用)

通过切片获取整个列表的副本:

x = some_array[:]

2. list()构造函数

用list构造器生成新列表:

x = list(some_array)

3. copy模块的浅拷贝

对于元素都是不可变类型(如整数、字符串)的简单列表,浅拷贝足够:

import copy
x = copy.copy(some_array)

4. 深拷贝(针对嵌套可变对象)

如果原列表包含嵌套的可变对象(比如列表里套列表),需要用深拷贝来保证所有层级的对象都是独立的:

import copy
x = copy.deepcopy(some_array)

验证效果

修改副本后原列表不会受影响:

some_array = [1,2,3,4,5,6]
x = some_array[:]
x[2] = 10
print(some_array)  # 输出: [1, 2, 3, 4, 5, 6]
print(x)           # 输出: [1, 2, 10, 4, 5, 6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:17:05