Senarai Pengklonan untuk Tugasan Tidak Diubah: Panduan Komprehensif
Dalam Python, memberikan senarai kepada pembolehubah baharu menggunakan new_list = my_list isn't salinan tulen. Sebaliknya, rujukan kepada senarai asal dibuat. Akibatnya, pengubahsuaian pada senarai baharu juga mengubah senarai asal.
Untuk mengelakkan perubahan yang tidak dijangka ini, adalah penting untuk mengklon atau menyalin senarai. Berikut ialah beberapa pendekatan:
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)
Pertimbangkan sampel dengan senarai bersarang dan contoh:
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}')
Output:
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)]
Seperti yang anda lihat, manakala senarai asal dan contoh bersarang berubah, hanya salinan dalam (f) telah menyalinnya dengan tepat, mengekalkan sebelumnya nilai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Salinan Sebenar Senarai Python untuk Mengelakkan Pengubahsuaian Tidak Disengajakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!