Python - Salin Daftar

Halo, para pemrogram Python yang berbakat! Hari ini, kita akan menyelam ke dalam dunia yang menarik tentang menyalin daftar di Python. Sebagai guru ilmu komputer ramah yang tinggal di sekitar, saya di sini untuk membimbing Anda melalui perjalanan ini dengan penjelasan yang jelas, banyak contoh, dan mungkin saja beberapa lelucon di samping itu. Jadi, mari kita mulai!

Python - Copy Lists

Menyalin Daftar di Python

Sebelum kita melompat ke berbagai cara menyalin daftar, mari kita pertama-tama mengerti mengapa kita perlu menyalin daftar. Bayangkan Anda memiliki daftar belanja, dan Anda ingin membagikannya dengan teman kost Anda. Anda bisa memberikan mereka daftar asli Anda, tetapi apa jika mereka memutuskan untuk menambahkan "cokelat" kepadanya (siapa yang tidak)? Tiba-tiba, daftar belanja sehat yang telah Anda rencanakan dengan hati-hati kalah! Ini dimana proses penyalinan menjadi sangat berguna.

Di Python, ketika Anda menetapkan daftar ke variabel baru, Anda tidak membuat daftar baru. Sebaliknya, Anda membuat referensi baru ke daftar yang sama. Mari kita lihat ini dalam aksi:

original_list = [1, 2, 3, 4, 5]
new_list = original_list

print("Daftar asli:", original_list)
print("Daftar baru:", new_list)

new_list.append(6)

print("Daftar asli setelah modifikasi:", original_list)
print("Daftar baru setelah modifikasi:", new_list)

Output:

Daftar asli: [1, 2, 3, 4, 5]
Daftar baru: [1, 2, 3, 4, 5]
Daftar asli setelah modifikasi: [1, 2, 3, 4, 5, 6]
Daftar baru setelah modifikasi: [1, 2, 3, 4, 5, 6]

Kaget? Kedua daftar berubah karena mereka sebenarnya adalah daftar yang sama di memori. Ini dimana penyalinan menjadi penyelamat!

Salin Dangkal pada Daftar Python

Salin dangkal membuat objek daftar baru, tetapi elemen di dalam daftar baru adalah referensi ke objek yang sama di daftar asli. Ini seperti membuat fotokopi dari daftar belanja Anda – Anda memiliki kertas baru, tetapi barang-barang yang ditulis di atasnya adalah sama.

Mari kita lihat bagaimana membuat salin dangkal:

import copy

original_list = [1, [2, 3], 4]
shallow_copy = copy.copy(original_list)

print("Daftar asli:", original_list)
print("Salin dangkal:", shallow_copy)

shallow_copy[1][0] = 'dua'

print("Daftar asli setelah modifikasi:", original_list)
print("Salin dangkal setelah modifikasi:", shallow_copy)

Output:

Daftar asli: [1, [2, 3], 4]
Salin dangkal: [1, [2, 3], 4]
Daftar asli setelah modifikasi: [1, ['dua', 3], 4]
Salin dangkal setelah modifikasi: [1, ['dua', 3], 4]

Perhatikan bahwa mengubah daftar bersarang di salin dangkal juga mengganggu daftar asli? Itu karena daftar bersarang masih adalah referensi ke objek yang sama di memori.

Salin Dalam pada Daftar Python

Salin dalam, di sisi lain, membuat daftar baru dan secara rekursif menambahkan salinan dari objek bersarang. Ini seperti menulis ulang seluruh daftar belanja Anda oleh tangan – semua adalah baru dan independen.

Berikut ini bagaimana membuat salin dalam:

import copy

original_list = [1, [2, 3], 4]
deep_copy = copy.deepcopy(original_list)

print("Daftar asli:", original_list)
print("Salin dalam:", deep_copy)

deep_copy[1][0] = 'dua'

print("Daftar asli setelah modifikasi:", original_list)
print("Salin dalam setelah modifikasi:", deep_copy)

Output:

Daftar asli: [1, [2, 3], 4]
Salin dalam: [1, [2, 3], 4]
Daftar asli setelah modifikasi: [1, [2, 3], 4]
Salin dalam setelah modifikasi: [1, ['dua', 3], 4]

Kali ini, mengubah salin dalam tidak mengganggu daftar asli. Itu benar-benar independen!

Menyalin Daftar Menggunakan Notasi Slice

Sekarang, mari kita lihat beberapa cara lain menyalin daftar. Salah satu metode termudah adalah menggunakan notasi slice. Ini seperti mengatakan, "Saya ingin salin dari seluruh daftar dari awal sampai akhir."

original_list = [1, 2, 3, 4, 5]
slice_copy = original_list[:]

print("Daftar asli:", original_list)
print("Salin slice:", slice_copy)

slice_copy.append(6)

print("Daftar asli setelah modifikasi:", original_list)
print("Salin slice setelah modifikasi:", slice_copy)

Output:

Daftar asli: [1, 2, 3, 4, 5]
Salin slice: [1, 2, 3, 4, 5]
Daftar asli setelah modifikasi: [1, 2, 3, 4, 5]
Salin slice setelah modifikasi: [1, 2, 3, 4, 5, 6]

Metode ini membuat salin dangkal dari daftar, yang biasanya cukup bagi daftar dari objek immutable seperti angka dan string.

Menyalin Daftar Menggunakan Fungsi list()

Cara lain untuk membuat salin adalah dengan menggunakan fungsi list(). Ini seperti memberitahu Python, "Buatlah saya daftar baru yang terlihat seperti ini."

original_list = [1, 2, 3, 4, 5]
list_copy = list(original_list)

print("Daftar asli:", original_list)
print("Salin list:", list_copy)

list_copy.append(6)

print("Daftar asli setelah modifikasi:", original_list)
print("Salin list setelah modifikasi:", list_copy)

Output:

Daftar asli: [1, 2, 3, 4, 5]
Salin list: [1, 2, 3, 4, 5]
Daftar asli setelah modifikasi: [1, 2, 3, 4, 5]
Salin list setelah modifikasi: [1, 2, 3, 4, 5, 6]

Metode ini juga membuat salin dangkal dari daftar.

Menyalin Daftar Menggunakan Metode copy()

Terakhir tapi tidak terkecil, kita memiliki metode copy(), yang adalah metode bawaan untuk daftar. Ini seperti daftar tersebut mengatakan, "Disini, ambil salinan dari saya!"

original_list = [1, 2, 3, 4, 5]
copy_method = original_list.copy()

print("Daftar asli:", original_list)
print("Salin metode:", copy_method)

copy_method.append(6)

print("Daftar asli setelah modifikasi:", original_list)
print("Salin metode setelah modifikasi:", copy_method)

Output:

Daftar asli: [1, 2, 3, 4, 5]
Salin metode: [1, 2, 3, 4, 5]
Daftar asli setelah modifikasi: [1, 2, 3, 4, 5]
Salin metode setelah modifikasi: [1, 2, 3, 4, 5, 6]

Metode ini juga membuat salin dangkal dari daftar.

Sekarang, mari kita ringkankan semua metode ini dalam tabel yang praktis:

Metode Sintaks jenis Salin Catatan
Penetapan new_list = original_list Referensi Bukan salin yang asli
Salin Dangkal copy.copy(original_list) Dangkal Daftar baru, referensi objek sama
Salin Dalam copy.deepcopy(original_list) Dalam Daftar baru, referensi objek baru
Notasi Slice original_list[:] Dangkal Mudah dan dapat dibaca
Fungsi list() list(original_list) Dangkal Inten yang jelas
Metode copy() original_list.copy() Dangkal Metode bawaan daftar

Ingat, memilih metode salin yang benar tergantung pada kebutuhan Anda. Jika Anda menjalani daftar sederhana dari objek immutable, salin dangkal biasanya cukup. Tetapi jika Anda memiliki daftar bersarang atau objek yang dapat diubah, Anda mungkin perlu salin dalam untuk memastikan kebebasan penuh.

Dan itu adalah semua! Anda sekarang memiliki pengetahuan untuk menyalin daftar seperti profesional. Selanjutnya Anda perlu membagikan daftar belanja Anda, Anda akan tahu persis cara membuat salin tanpa risiko penambahan yang tak terduga. Happy coding, dan semoga daftar Anda selalu tersalin dengan sempurna!

Credits: Image by storyset