Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Python Mengendalikan Pass-by-Reference dan Pass-by-Value?

Bagaimana Python Mengendalikan Pass-by-Reference dan Pass-by-Value?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-25 01:29:10394semak imbas

How Does Python Handle Pass-by-Reference and Pass-by-Value?

Pass-by-Reference dalam Python: Penjelasan Komprehensif

Dalam Python, menghantar argumen kepada fungsi dilakukan melalui rujukan, bermakna parameter yang diluluskan adalah rujukan kepada objek sebenar. Walau bagaimanapun, adalah penting untuk memahami perbezaan antara menghantar rujukan mengikut nilai berbanding sebenarnya lulus melalui rujukan.

Melalui Rujukan mengikut Nilai

Dalam Python, parameter diluluskan mengikut nilai, yang bermaksud salinan daripada objek diberikan kepada parameter dalam fungsi. Ini mempunyai dua implikasi:

  1. Objek boleh ubah: Jika objek yang dilalui boleh berubah (iaitu, kandungannya boleh ditukar), pengubahsuaian yang dibuat pada objek dalam fungsi akan dicerminkan dalam objek asal di luar fungsi. Ini kerana kedua-dua parameter fungsi dan objek asal merujuk objek asas yang sama dalam ingatan.
  2. Objek tidak berubah: Untuk objek tidak berubah (iaitu, kandungannya tidak boleh diubah), objek asal tidak boleh diubah suai dari dalam fungsi. Ini kerana parameter dalam fungsi ialah salinan objek asal dan perubahan kepada salinan tidak menjejaskan yang asal.

Simulating Pass-by-Reference dalam Python

Walaupun rujukan lulus benar tidak disokong secara langsung dalam Python, terdapat beberapa teknik untuk mensimulasikannya:

  1. Kembalikan Nilai Baharu: Fungsi boleh mengembalikan nilai baharu yang menggantikan objek asal dalam konteks panggilan. Walaupun tidak lulus-demi-rujukan semata-mata, ini membenarkan pengubahsuaian berkesan objek asal.
  2. Gunakan Pembungkus: Kelas atau senarai pembungkus boleh digunakan untuk memegang objek dan menghantarnya dengan rujukan. Pengubahsuaian yang dibuat pada objek dalam fungsi akan menjejaskan objek asal kerana pembungkus diluluskan oleh nilai, bukan objek itu sendiri.

Contoh:

Kod berikut menunjukkan laluan lewat -rujukan dengan boleh ubah (senarai) dan tidak boleh ubah (rentetan):

# Mutable List
def modify_list(the_list):
    the_list.append('four')

outer_list = ['one', 'two', 'three']
print("Before: ", outer_list)
modify_list(outer_list)
print("After: ", outer_list)

# Immutable String
def modify_string(the_string):
    the_string = 'In a kingdom by the sea'

outer_string = 'It was many and many a year ago'
print("Before: ", outer_string)
modify_string(outer_string)
print("After: ", outer_string)

Output:

Before:  ['one', 'two', 'three']
After:  ['one', 'two', 'three', 'four']
Before:  It was many and many a year ago
After:  It was many and many a year ago

Seperti yang dilihat dalam output, senarai berjaya diubah suai (laluan demi rujukan), manakala rentetan kekal tidak berubah (lulus -mengikut nilai).

Atas ialah kandungan terperinci Bagaimana Python Mengendalikan Pass-by-Reference dan Pass-by-Value?. 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