我总结了我的原始程序中的代码,以提高可读性,并分离出主要问题。由于某种原因,当我在"boom“变量后面添加"poss”(甚至是poss.copy()),然后对"poss“进行后续更改时,随后的更改将以某种方式在原始列表("boom")中注册。我不想这样,我想让繁荣成为一种保存记录的变量,保持每一种poss状态。我也不能导入库(所以我不能使用解决方案,比如从复制库中导入深度拷贝())。
poss= [
['*', 'j', '*', '*', '*'],
['*', '*', '*', '*', '*']
]
boom = [poss]
#first change
poss[0][1],poss[1][3] = poss[1][3] , poss[0][1]
#first print works well shows correct change
print("First Generation:")
for boomite in boom:
print(boomite)
print("\n")
poss[1][3],poss[0][0] = poss[0][0] , poss[1][3]
boom.append(poss.copy())
#This should print two different values but it prints same
print("First and Second Generation:")
for boomite in boom:
print(boomite)
print("\n")
#Somehow the second and any successive changes are present in
#the previous generations 发布于 2021-09-25 01:05:13
您没有在poss分配中复制boom,甚至poss.copy()也不能工作,因为列表是嵌套的,所以不能简单复制它,您需要深入复制它。
而不是:
boom = [poss]尝试:
boom = [[x[:] for x in poss]]或使用copy.deepcopy
import copy
boom = [copy.deepcopy(poss)]https://stackoverflow.com/questions/69322343
复制相似问题