python list類型複製(傳值,不傳值)

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[:]
這樣寫 就解決了 至於這個問題的底層原理,還有 爲什麼 ,作爲初學者 我現在也不知道 只是想把我碰到的這個問題記一下,感覺挺重要的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章