为了账号安全,请及时绑定邮箱和手机立即绑定

python复制列表影响基本列表

python复制列表影响基本列表

幕布斯6054654 2023-02-22 16:00:14
所以在我的空闲时间里,我一直在尝试制作一个小程序,但是我遇到了一个小问题。我想更改复制列表中的某些内容,但由于某种原因,更改会转移到原始/基本列表中。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)

您可以在官方文档中了解浅拷贝和深拷贝的区别。



查看完整回答
反对 回复 2023-02-22
?
慕桂英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通过将对象的所有可变元素向下复制到一定深度来避免这个问题。


查看完整回答
反对 回复 2023-02-22
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信