python复制列表影响基本列表

所以在我的空闲时间里,我一直在尝试制作一个小程序,但是我遇到了一个小问题。我想更改复制列表中的某些内容,但由于某种原因,更改会转移到原始/基本列表中。


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。有人知道问题是什么或我做错了什么/误解了吗?非常感谢并提前感谢您的帮助。


幕布斯6054654
浏览 90回答 2
2回答

有只小跳蛙

您必须使用deepcopy复制所有内容,否则您只会复制顶级列表。例如:from random import *from copy import deepcopya = [[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 thisb=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

你有一个列表列表,因此你需要deepcopy a避免变异a:import copya = [[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通过将对象的所有可变元素向下复制到一定深度来避免这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python