python 函數傳遞 可變類型的變量時 直接傳遞傳過去的 是地址 假如傳遞的變量是 L(L是list 類型),在 函數體內部 如果出現直接複製,複製的也是地址。 舉一下我碰到的問題
def Warshall(L,n):#進行閉包運算 Warshall算法 參數:要閉包運算的矩陣,矩陣的行列數
f=L
for c in range(n):
i=[]
for r in range(n):
if f[r][c]!=0:
i.append(r)
for j in i:
l1=chouqujvzhendehang(f,j,n)
l2=chouqujvzhendehang(f,c,n)
s=jvzhenhangluojijia(l1,l2,n)
f[j]=s
return f
f=L
這句話,是直接把 L的地址給f 也就是 對f做修改的同時也會修改L。
我是不想修改L的 (不然我幹嘛要複製,,,)
然後我就從網上找到了一個解決辦法
f=L[:]
這樣寫 就解決了 至於這個問題的底層原理,還有 爲什麼 ,作爲初學者 我現在也不知道 只是想把我碰到的這個問題記一下,感覺挺重要的。