Lewati Referensi vs. Nilai dengan Python

Pass Reference Vs



Setelah mengetahui Python, Anda dapat menemukan contoh di mana fungsi tidak mengubah argumen di tempat seperti yang Anda harapkan, terutama jika Anda mengenal banyak bahasa komputer lainnya. Banyak bahasa menggunakan argumen metode sebagai referensi, yang didefinisikan sebagai meneruskan Referensi ke variabel saat ini. Jika Anda seorang pengembang Python tingkat lanjut yang ingin memahami cara khusus Python dalam menangani argumen metode, maka panduan ini sangat cocok untuk Anda.

Python Mendukung Referensi Lewat Objek

Pass-by-reference dan pass-by-value tidak dapat disangkal adalah dua cara yang paling dikenal dan mudah dipahami untuk melewati parameter di antara bahasa pemrograman. Sayangnya, Python adalah 'pass-by-object-reference,' bukan Pass by Value atau Pass by Reference, sering disebut sebagai Referensi Panggilan demi Objek serta Panggilan dengan Berbagi. Sangat berguna untuk melihat lebih dekat pada konsep itu sendiri dengan membaginya menjadi beberapa segmen saat Anda terjun ke spesifikasi teknis lewat Referensi:







Lulus: ini berarti menyediakan metode dengan argumen.



Dengan Referensi: ini berarti argumen yang Anda pindahkan ke metode merujuk ke variabel yang sekarang berada di penyimpanan alih-alih replika yang berbeda dari variabel itu.



Saat Anda menetapkan metode sebagai referensi ke variabel yang ditentukan, variabel yang terkait dengannya akan secara eksplisit dipengaruhi oleh semua operasi pada Referensi ini. Sekarang mari kita perhatikan contoh bagaimana, dalam praktiknya, ini bekerja. Dalam contoh ini, kami telah mendefinisikan variabel ' marah' memiliki nilai 4 . Sepanjang skenario ini, variabel ' marah' tidak dimodifikasi pada tempatnya. Python tampaknya menangani argumen yang Anda berikan alih-alih referensi ke variabel saat ini sebagai nilai mandiri.





Apakah ini berarti bahwa alih-alih dengan Referensi, Python memindahkan argumen berdasarkan nilai? Python memindahkan argumen melalui penugasan, jadi bukan dengan Referensi atau dengan nilai. Logika untuk ini ada dua:



Saat ini, parameter yang lewat adalah penunjuk ke suatu objek. Jenis data tertentu dapat berubah, dan beberapa tidak dapat diubah.

Jika kita memindahkan objek yang dapat diubah ke dalam suatu fungsi, fungsi tersebut memperoleh referensi ke objek yang sama sehingga Anda dapat mengubah semuanya untuk kepuasan jiwa Anda; namun, lingkup eksternal tidak akan tahu apa-apa sebelum Anda bergabung kembali dengan Referensi dalam fungsi. Setelah Anda selesai, Referensi eksternal hanya akan mengarah ke objek yang sebenarnya. Jika Anda memindahkan objek yang tidak dapat diubah ke suatu fungsi, Referensi eksternal selalu tidak dapat diikat ulang, dan Anda tidak dapat mengubah objek begitu saja. Agar lebih mudah, mari kita pahami satu per satu.

Lewati Referensi

Pertama-tama, Anda harus memahami bahwa variabel 'mylist' itu sendiri bukan daftar tetapi mengacu pada daftar yang memiliki nilai. Anda dapat memanggil variabel 'mylist' sebagai wadah yang memiliki nilai di dalamnya. Nilai daftar adalah objek. Variabel 'mylist' telah langsung dikirim ke fungsi dengan isinya.

Baik daftar & daftar saya tampaknya merupakan variabel penyimpanan yang sama dalam contoh kode di bawah ini dan dengan demikian berlaku untuk objek penyimpanan yang sama. Itu sebabnya pada output, ia mencetak 'Saeed.'

Setiap tindakan yang dilakukan pada variabel atau entitas akan segera dicerminkan ke metode pemanggil. Metode dapat sepenuhnya mengubah nilai variabel dan mengarahkannya ke objek yang sepenuhnya berbeda. Seperti yang Anda lihat di fungsi 'set_list', kami telah mengubah isi daftar dan mencetak daftar baru yang memiliki elemen 'Aqsha.' Ini karena kami telah mengembalikan daftar yang dimodifikasi dan mencetaknya pada baris yang sama dengan pemanggil.

Metode ini juga dapat mengalokasikan kembali elemen variabel untuk hasil yang sama seperti di bawah ini. Anda dapat melihat bahwa kami telah menambahkan nilai baru ke daftar, dan perubahan telah tercermin. Kami telah menambahkan string unik ke daftar dan mengembalikannya ke pemanggil. Untuk menyimpulkan, metode dan pemanggil telah menggunakan variabel dan objek yang sama di seluruh relasi pass-by.

Lewati Nilai

Melalui nilai pass by, metode ini dilengkapi dengan duplikat objek argumen yang ditetapkan oleh pemanggil. Ini memastikan bahwa item asli tetap tidak berubah dan semua modifikasi yang dibuat disimpan di lokasi memori terpisah dalam replika objek yang sama.

Ini sama validnya dengan operasi apa pun yang dieksekusi pada variabel atau entitas dengan metode. Duplikat variabel & objek dalam cakupan metode pemanggil sepenuhnya dipisahkan untuk meringkasnya.

Lewati Objek dengan Referensi

Sepanjang situasi ini, karena Python berbeda, metode Python mendapatkan referensi objek yang sangat mirip dalam penyimpanan seperti yang dirujuk oleh pemanggil. Sebaliknya, teknik ini tidak mendapatkan variabel 'mylist' (wadah). Metode pemanggil menyimpan objek yang sama; metode ini menghasilkan wadah seseorang dan menghasilkan indeks yang sama sekali baru untuknya sendiri, seperti halnya nilai pass-by.

Penelepon dan metode berbicara tentang objek yang sama di penyimpanan, tetapi ketika metode yang ditambahkan menerapkan item eksternal ke daftar, entitas pemanggil dimodifikasi. Mereka memiliki beberapa label, tetapi mereka adalah hal yang sama. Kedua variabel memegang objek yang sangat mirip. Itulah arti dibalik hubungannya dengan bergerak oleh objek. Dalam penyimpanan, metode dan pemanggil menggunakan objek serupa namun menangkapnya melalui banyak variabel. Variabel pemanggil (wadah) tidak akan diubah oleh modifikasi apa pun yang dilakukan pada variabel metode (wadah); hanya data atau konten yang diubah.

Kesimpulan

Python beroperasi secara independen dari bahasa yang menerima pemindahan dengan Referensi atau nilai argumen. Argumen metode adalah variabel lokal yang telah dialokasikan ke setiap nilai yang ditransfer ke metode. Tapi itu tetap tidak menghalangi Anda untuk mendapatkan hasil yang sama seperti yang Anda temukan dalam bahasa lain saat memindahkan argumen melalui proxy.