複製未更改分配的清單:綜合指南
在 Python 中,使用 new_list = my_list 將清單指派給新變數不是正版。相反,會建立對原始清單的引用。因此,對新清單的修改也會改變原始清單。
為了防止這些意外更改,複製或複製清單至關重要。以下是幾種方法:
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
import copy new_list = copy.copy(old_list)
import copy new_list = copy.deepcopy(old_list)
考慮一個帶有嵌套列表和實例的範例:
class Foo(object): 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) a.append('baz') # Modify original list foo.val = 5 # Modify nested instance 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)]
如您所見,雖然原始清單和巢狀實例發生了變化,但只有深度複製(f)準確地複製了它們,並保留了先前的值。
以上是如何建立 Python 清單的真實副本以避免意外修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!