python - python复制列表影响基本列表
问题描述
所以在我的空闲时间我一直在尝试制作一个小程序,但是我遇到了一个小问题。我想更改复制列表中的某些内容,但由于某种原因,这些更改会转移到原始/基本列表中。
from random import *
a = [[0,5,9,5,9,4,0,0,5],
[0,0,7,0,0,3,0,0,3],
[0,0,5,0,0,0,7,8,45]]
b = a.copy()
for x in range(len(b)):
for y in range(len(b[1])):
if b[x][y] == 0:
b[x][y] = randint(10, 100000)
if a == b:
print("Not working")
print(b)
print(a)
我也尝试过b = list(a)
使用 copy 库,但我对 b 的所有更改仍然会转移到 a,导致a == b
为true。有人知道问题是什么或我做错了什么/误解了吗?帮助将不胜感激,并在此先感谢。
解决方案
您有一个列表列表,因此您需要deepcopy
a
避免变异a
:
import copy
a = [[0,5,9,5,9,4,0,0,5],
[0,0,7,0,0,3,0,0,3],
[0,0,5,0,0,0,7,8,45]]
b = copy.deepcopy(a)
简短说明:您复制 list 的外部“结构” a
,而“内部结构”仍然由对“子”级列表的引用组成。因此第二级的b
仍然指的是相同的元素a
。copy.deepcopy
通过将对象的所有可变元素向下复制到某个深度来避免此问题。
推荐阅读
- powershell - 将 PowerShell 中的用户移动到另一个没有 CSV 的 OU
- php - 如何在 php Web 服务中执行和显示 2 个子查询的结果并生成 json 编码
- ruby-on-rails - 当属性不存在时,将错误合并到我的自定义 account_form 会导致错误
- c++ - 使用 libxml2 解析 XML 文件时缺少元素值
- powershell - 如何抑制退出状态回声?
- sql - 如何处理sql中的多用途列?
- python - Spyder 控制台中的大量内存使用。`logging`、内存泄漏还是 Spyder 控制台?
- javascript - 第四个 y 轴在 Highcharts 中不显示标签
- hadoop - 有没有办法在单独的文件中设置查询参数(变量)?
- python - Button'对象没有属性python回调