深拷貝,淺拷貝,面試重要
-
思考下面的程式碼執行出的結果是什麼:
list = [0, 1, 2]
list[1] = list
print(list)list的第2個元素指向list本身, 所以無限迴圈
-
如何得出list = [0, [0, 1, 2], 2]這樣的結果?
list[1] = list[:]
-
經過以下步驟, a和b分別是多少? 為什麼?
a = [0, [1, 2], 3]b = a[:]
a[0] = 8
a[1][1] = 9
a[:]是淺拷貝, 只對物件最頂層進行拷貝
-
如何保證第3題中最終b = [0, [1, 2], 3]
使用深拷貝
-
寫出下面程式碼執行結果:
L = [1, 2]
M = L
L = L + [3, 4]
print(L)
print(M) -
寫出下面程式碼執行結果:
L = [1, 2]
M = L
L += [3, 4]
print(L)
print(M)L += [3, 4] 是L本身加上[3, 4]
L = L + [3, 4] 先計算等號右邊, 得到一個新的引用, 指向新的L(等號右邊的L是原來的L, 等號左邊的是一個新的L)
-
執行以下程式碼:
def foo(a, b, c=[]):
c.append(a)
c.append(b)
print©
foo(1, 2) python直譯器沒有接收到c的引數, 使用預設的空列表(預設引數)
foo(1, 2, []) python直譯器接收到新的c的引數, 就是用新的空列表, 此時, 預設引數的列表已經變為[1, 2]
foo(3, 4) python直譯器沒有接收到c的引數, 繼續使用預設的預設列表, 即[1, 2].append[3, 4]
a = [0,1,2,3]
a[10] 不存在這個元素, 報錯(下標越界)
a[10:] 因為列表切片返回一個列表, 當下表越界時, 返回空列表, 不報錯