首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用同一个变量追加python列表会导致在所有列表位置注册变量的新更改。

使用同一个变量追加python列表会导致在所有列表位置注册变量的新更改。
EN

Stack Overflow用户
提问于 2021-09-25 00:54:13
回答 1查看 95关注 0票数 0

我总结了我的原始程序中的代码,以提高可读性,并分离出主要问题。由于某种原因,当我在"boom“变量后面添加"poss”(甚至是poss.copy()),然后对"poss“进行后续更改时,随后的更改将以某种方式在原始列表("boom")中注册。我不想这样,我想让繁荣成为一种保存记录的变量,保持每一种poss状态。我也不能导入库(所以我不能使用解决方案,比如从复制库中导入深度拷贝())。

代码语言:javascript
复制
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 

我得到输出:https://i.stack.imgur.com/cPpXL.png

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 01:05:13

您没有在poss分配中复制boom,甚至poss.copy()也不能工作,因为列表是嵌套的,所以不能简单复制它,您需要深入复制它。

而不是:

代码语言:javascript
复制
boom = [poss]

尝试:

代码语言:javascript
复制
boom = [[x[:] for x in poss]]

或使用copy.deepcopy

代码语言:javascript
复制
import copy
boom = [copy.deepcopy(poss)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69322343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档