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

Python二维列表赋值疑问:list()复制后子列表为何同步变化?

为什么修改array1会影响array2?

这是个典型的**浅拷贝(shallow copy)**问题,我来一步步给你拆解清楚:

  • 先看你的第一行代码:array1=[[0 for rows in range(9)] for cols in range(9)]
    这行创建了一个9×9的二维列表,外层列表里的每一个元素都是独立的、包含9个0的子列表。

  • 接下来的array2=list(array1)
    这里用list()对array1做了一次拷贝,但注意:这是浅拷贝。浅拷贝只会复制外层列表的结构——也就是说,array2是一个全新的外层列表(所以id(array1) is id(array2)会返回False,因为它们是两个不同的对象),但外层列表里的每一个子列表并没有被重新复制,array2里的子列表和array1里的子列表是完全同一个对象,共享同一块内存空间。

  • 最后你执行array1[0][0]=1
    这行代码并没有修改外层列表的元素(比如把第一个子列表换成另一个新列表),而是修改了第一个子列表内部的元素值。因为array2的第一个子列表和array1的第一个子列表是同一个对象,所以这个修改会直接反映在array2里,导致print(array2[0][0])输出1。

如果想要让array2完全独立于array1,不受array1修改的影响,你需要做深拷贝(deep copy),可以使用Python内置copy模块里的deepcopy方法:

import copy
array1=[[0 for rows in range(9)] for cols in range(9)]
array2=copy.deepcopy(array1)
array1[0][0]=1
print(array2[0][0])  # 输出 0
print(id(array1) is id(array2))  # 输出 False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:07:39