Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Pas-by-Tugasan Python memberi kesan kepada Jenis Boleh Berubah dan Tidak Boleh Berubah?

Bagaimanakah Pas-by-Tugasan Python memberi kesan kepada Jenis Boleh Berubah dan Tidak Boleh Berubah?

Susan Sarandon
Lepaskan: 2025-01-01 02:49:10
asal
322 orang telah melayarinya

How Does Python's Pass-by-Assignment Impact Mutable and Immutable Types?

Lulus Rujukan lwn. Lulus Nilai

Apabila menghantar pembolehubah kepada fungsi dalam Python, hujah sentiasa diluluskan oleh tugasan. Ini bermakna parameter dalam fungsi adalah rujukan kepada objek yang dihantar masuk.

Walau bagaimanapun, memandangkan Python membezakan antara jenis boleh ubah dan tidak boleh ubah, tingkah laku pembolehubah yang diluluskan berbeza:

Jenis Boleh Ubah:
Untuk jenis boleh ubah, parameter yang diluluskan merujuk kepada objek yang sama yang dihantar masuk. Perubahan dibuat pada objek dalam fungsi dipantulkan dalam skop luar.

Jenis Tidak berubah:
Untuk jenis tidak berubah, parameter yang diluluskan ialah salinan objek yang dihantar masuk. Sebarang perubahan yang dibuat kepada objek dalam fungsi tidak dipantulkan di luar skop.

Contoh:

Pertimbangkan kelas Python ini:

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'
Salin selepas log masuk

Apabila contoh kelas ini dicipta:

PassByReference()
Salin selepas log masuk

Output adalah 'Asal'. Ini kerana parameter 'var' dalam kaedah 'change' ialah salinan atribut 'variable' dalam skop luar. Oleh itu, mengubah suai 'var' dalam kaedah tidak mempunyai kesan ke atas 'pembolehubah' asal.

Mencapai Lulus melalui Rujukan untuk Jenis Tidak Boleh Berubah

Untuk mencapai tingkah laku lulus demi rujukan bagi jenis tidak berubah, teknik seperti mengembalikan nilai baharu atau menggunakan pembungkus boleh digunakan:

Mengembalikan yang Baru Nilai:

def change_immutable(parameter):
    new_parameter = 'Changed'
    return new_parameter

result = change_immutable('Original')
Salin selepas log masuk

Dalam kes ini, fungsi 'change_immutable' mengembalikan nilai baharu, yang kemudiannya diberikan kepada pembolehubah 'result'.

Menggunakan Wrapper:

class ImmutableWrapper:
    def __init__(self, value):
        self.value = value

def change_immutable_wrapper(wrapper):
    wrapper.value = 'Changed'

immutable_wrapper = ImmutableWrapper('Original')
change_immutable_wrapper(immutable_wrapper)
print(immutable_wrapper.value)  # Outputs 'Changed'
Salin selepas log masuk

Dalam pendekatan ini, pembungkus objek digunakan untuk memegang nilai tidak berubah. Perubahan yang dibuat pada nilai pembalut ditunjukkan dalam skop luar.

Atas ialah kandungan terperinci Bagaimanakah Pas-by-Tugasan Python memberi kesan kepada Jenis Boleh Berubah dan Tidak Boleh Berubah?. 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