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
Lepaskan: 2024-12-24 03:37:14
asal
804 orang telah melayarinya

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()
Salin selepas log masuk
  • Senarai Menghiris:
new_list = old_list[:]
Salin selepas log masuk
  • senarai() Pembina:
new_list = list(old_list)
Salin selepas log masuk

Menyalin Senarai Dalam

Jika anda perlu menyalin elemen senarai juga, gunakan deep menyalin:

import copy
new_list = copy.deepcopy(old_list)
Salin selepas log masuk

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}')
Salin selepas log masuk

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)]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan