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)
您可以在官方文档中了解浅拷贝和深拷贝的区别。

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通过将对象的所有可变元素向下复制到一定深度来避免这个问题。
添加回答
举报