1
私は簡単な問題を抱えています。私は非常に明白な間違いをしていると確信していますが、私はそれを見つけることができません。私はl_old
を反復を受ける前にl
のコピーにします。私は次のPythonスクリプトを持っています。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[:]
しようとしました。私は何が欠けていますか?私はそれがネストされたリストであるという事実と関係があると思いますが、ネストされたリストがすべて値でコピーされるように、どのように書くことができますか?