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.
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'
Apabila contoh kelas ini dicipta:
PassByReference()
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.
Untuk mencapai tingkah laku lulus demi rujukan bagi jenis tidak berubah, teknik seperti mengembalikan nilai baharu atau menggunakan pembungkus boleh digunakan:
def change_immutable(parameter): new_parameter = 'Changed' return new_parameter result = change_immutable('Original')
Dalam kes ini, fungsi 'change_immutable' mengembalikan nilai baharu, yang kemudiannya diberikan kepada pembolehubah 'result'.
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'
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!