Mencipta Salinan Senarai Tidak Boleh Ubah
Dalam Python, semasa memberikan rujukan senarai seperti new_list = my_list, pengubahsuaian kepada new_list secara mengejutkan mempengaruhi my_list. Ini berlaku kerana bukannya mencipta senarai baharu yang berbeza, Python hanya menyalin rujukan kepada senarai sebenar, menyebabkan kedua-dua new_list dan my_list menghala ke senarai yang sama.
Untuk menangani perkara ini dan mengelakkan perubahan yang tidak dijangka, adalah penting untuk cipta salinan sebenar senarai menggunakan pelbagai kaedah.
Mengklon a Senarai
Untuk mendapatkan klon tidak boleh diubah atau salinan cetek senarai, pertimbangkan pilihan berikut:
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
Menyalin Senarai Dalam
Jika anda perlu menyalin elemen senarai juga, gunakan deep menyalin:
import copy new_list = copy.deepcopy(old_list)
Contoh
Pertimbangkan kod berikut:
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}')
Hasil:
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)]
Ini menunjukkan cara pengubahsuaian pada senarai asal dan kejadiannya hanya mempengaruhi senarai asal dan bukan versi salinannya (b, c, d dan f).
Atas ialah kandungan terperinci Bagaimanakah saya boleh membuat salinan senarai yang tidak boleh diubah dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!