Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya boleh membuat salinan senarai yang tidak boleh diubah dalam Python?

Bagaimanakah saya boleh membuat salinan senarai yang tidak boleh diubah dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-24 03:37:14821semak imbas

How Can I Create an Immutable Copy of a List in Python?

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:

  • Kaedah list.copy() (Python 3.3 ) :
new_list = old_list.copy()
  • Senarai Menghiris:
new_list = old_list[:]
  • senarai() Pembina:
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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn