所以在我的空闲时间里,我一直在尝试制作一个小程序,但是我遇到了一个小问题。我想更改复制列表中的某些内容,但由于某种原因,更改会转移到原始/基本列表中。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)复制库,但我对 b 的所有更改仍然转移到 a,结果a == b为true。有人知道问题是什么或我做错了什么/误解了吗?非常感谢并提前感谢您的帮助。
2 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
您必须使用deepcopy复制所有内容,否则您只会复制顶级列表。
例如:
from random import *
from copy import deepcopy
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]]
#use this
b=deepcopy(a)
#instead of this
#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)
您可以在官方文档中了解浅拷贝和深拷贝的区别。
慕桂英4014372
TA贡献1871条经验 获得超13个赞
你有一个列表列表,因此你需要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通过将对象的所有可变元素向下复制到一定深度来避免这个问题。
添加回答
举报
0/150
提交
取消