本篇要介紹的,則是其他一些一不小心,可能就會產生非預期結果的範例。
List 的指派,跟一般變數不太一樣,改了源頭,其他的會跟著改:
a = [12, 34, 56, 78, 90] b = a a[0] = 99 print(a) print(b) # 跟著改變了如果你希望跟一般變數的操作一樣,會有新的一份串列,可以這樣用:
a = [12, 34, 56, 78, 90] b = a[:] a[0] = 99 print(a) print(b) # 不會受影響但是前面說過,串列可以把不同類型的資料放在一起,甚至可以再放入串列。這時候又會出現一些問題,因為串列裡面又有串列,包了好多層;但是「[:]」這種語法,只能複製一層:
a = [[12, 34], 56, 78, 90] b = a[:] a[0][0] = 99 print(a) print(b) # 又跟著改變了如果真的要把每一層都複製,可以這樣使用:
import copy a = [[12, 34], 56, 78, 90] b = copy.deepcopy(a) a[0][0] = 99 print(a) print(b) # 總算不會受影響了另外,你可能還記得,函式當中的預設參數,在每次呼叫時都會重新給值;但是若預設參數是串列時,附加的值會被保留:
def test(x, a=[]): print("Content of a when entering test:", a) a.append(x) print("Content of a when exiting test:", a) test(12) test(34) test(56)