带嵌套列表的Python传递值?
我有一个让我沮丧的简单问题。我肯定我犯了一个非常明显的错误,但我似乎找不到它。在进行迭代之前,我希望带嵌套列表的Python传递值?,python,Python,我有一个让我沮丧的简单问题。我肯定我犯了一个非常明显的错误,但我似乎找不到它。在进行迭代之前,我希望l_old是l的副本。我有以下Python脚本 import random def runtest(n,steps): l=[] for i in range(n): sublist=[] for j in range(n): sublist.append(0) l.append(sublist)
l_old
是l
的副本。我有以下Python脚本
import random
def runtest(n,steps):
l=[]
for i in range(n):
sublist=[]
for j in range(n):
sublist.append(0)
l.append(sublist)
for k in range(n-1):
i = random.randint(0,n-1)
j = random.randint(0,n-1)
while(l[i][j]==1):
i = random.randint(0,n-1)
j = random.randint(0,n-1)
l[i][j]=1
l_old = list(l)
print("L_OLD BEFORE ITERATION", l_old)
for k in range(steps):
for i in range(n):
for j in range(n):
num = 0
if i is not 0:
num+=l[i-1][j]
if i is not n-1:
num+=l[i+1][j]
if j is not 0:
num+=l[i][j-1]
if j is not n-1:
num+=l[i][j+1]
if(num > 1):
l[i][j]=1
print("L_OLD AFTER ITERATION",l_old)
return sum([sum(item) for item in l]), l_old, l
但是,我的输出将如下所示:
BEFORE ITERATION [[0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [1, 0, 1, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
AFTER ITERATION: [[0, 0, 0, 0, 0], [1, 1, 1, 0, 0], [1, 1, 1, 0, 0], [1, 1, 1, 0, 0], [1, 1, 1, 0, 0]]
因此,即使我复制了l
的值,而不是l
的引用,它也在改变。我尝试了l[:]
,结果也一样。我错过了什么?我认为这与它是一个嵌套列表这一事实有关,但是我如何编写它以使所有嵌套列表都按值复制呢
我认为这与它是一个嵌套列表这一事实有关
对。你做了一个浅拷贝:
l_old = list(l)
使用l[:]
进行切片也是一种浅拷贝
但如何编写它,使所有嵌套列表都按值复制
尝试深度复制:
from copy import deepcopy
l_old = deepcopy(l)