建立不可變清單副本
在Python 中,在分配諸如new_list = my_list 之類的清單引用時,對new_list 的修改會意外影響my_list。發生這種情況是因為 Python 不是建立不同的新列表,而是只是複製對實際列表的引用,導致 new_list 和 my_list 都指向同一個列表。
為了解決這個問題並防止意外更改,必須使用各種方法建立清單的真實副本。
複製清單
取得不可變的複製或清單的淺表副本,請考慮以下選項:
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
深度複製清單
如果需要複製清單的元素也使用深度複製:import copy new_list = copy.deepcopy(old_list)
範例
考慮以下程式碼:import copy class Foo: def __init__(self, val): self.val = val def __repr__(self): return f'Foo({self.val!r})' foo = Foo(1) a = ['foo', foo] b = a.copy() c = a[:] d = list(a) e = copy.copy(a) f = copy.deepcopy(a) # edit orignal list and instance a.append('baz') foo.val = 5 print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')
結果:
original: ['foo', Foo(5), 'baz'] list.copy(): ['foo', Foo(5)] slice: ['foo', Foo(5)] list(): ['foo', Foo(5)] copy: ['foo', Foo(5)] deepcopy: ['foo', Foo(1)]
以上是如何在 Python 中建立清單的不可變副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!