首页 > 解决方案 > 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)使用 copy 库,但我对 b 的所有更改仍然会转移到 a,导致a == btrue。有人知道问题是什么或我做错了什么/误解了吗?帮助将不胜感激,并在此先感谢。

标签: pythonlist

解决方案


您有一个列表列表,因此您需要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仍然指的是相同的元素acopy.deepcopy通过将对象的所有可变元素向下复制到某个深度来避免此问题。


推荐阅读