Python List - Menyalin List (List Copy)

Reno Iqbalsah

02/04/2023

Bagian ini memembahas tentang bagaimana kita dapat menyalin data dari sebuah list pada bahasa pemrograman Python.

Dalam bahasa pemrograman Python, kita dapat menyalin sebuah variabel ke variabel lain. Seperti di bawah ini.

    
x = 3 y = x x+= 2 print(x,y) # output : 5 3

Pada contoh di atas, angka 3 sebagai nilai dari variabel x akan diassign ke variabel y, kemudian variabel y akan berdiri sendiri sebagai variabel baru. Tapi bagaimana kalau kita ingin menyalin data dalam bentuk list?

    
x = ["kucing", "tupai", "perkutut"] y = x x.append("anjing") print(f'nilai x adalah {x}') # output : nilai x adalah ["kucing", "tupai", "perkutut", "anjing"] print(f'nilai y adalah {y}') # output : nilai x adalah ["kucing", "tupai", "perkutut", "anjing"]

Wow! Padahal kita hanya mengubah variabel x saja, tapi kenapa variabel y ikut berubah?

Pass by Value vs Pass by Reverence

Ketika kita meng-assign (menetapkan) tipe data primitif (number, string, boolean) ke dalam sebuah variabel, maka Python akan memperlakukannya sebagai pass by value, yaitu nilai dari data yang kita memasukkan akan disimpan dalam suatu variabel, sehingga ketika variabel tersebut di-assign kembali pada variabel lain, maka nilai tersebut akan di assign ke variabel baru.

Sedangkan ketika kita meng-assign tipe data berbasis objek (list, tuple, dictionary, set) ke dalam sebuah variabel, Python akan memperlakukannya sebagai pass by reverence. Yang artinya, variabel tersebut bukan menyimpan nilai dari data tersebut, melainkan referensi di mana lokasi data tersebut disimpan dalam memori. Sehingga ketika variabel tersebut di-assign ulang pada variabel baru, maka data yang disimpan pada variabel baru juga merupakan referensi pada sebuah objek yang sama.

    
x = ["kucing", "tupai", "perkutut"] y = x print(x is y) # output : True

Ketika kita mengevaluasi nilai x is y, ternyata operasi tersebut menghasilkan output True, yang berarti kedua variabel tersebut bukan hanya sama dalam segi nilai, melainkan keduanya merupakan suatu objek yang sama dan disimpan pada memori yang sama. Lalu, bagaimana jika kita ingin menyalin data dari suatu list ke variabel baru, kemudian mengubahnya tanpa mempengaruhi variabel aslinya?

Menggunakan Metode .copy()

Jalan keluarnya sangatlah mudah, kita hanya perlu menambahkan metode .copy() ketika kita meng-assign list pada variabel baru.

    
x = ["kucing", "tupai", "perkutut"] y = x.copy() x.append("anjing") print(f'nilai x adalah {x}') # output : nilai x adalah ["kucing", "tupai", "perkutut", "anjing"] print(f'nilai y adalah {y}') # output : nilai x adalah ["kucing", "tupai", "perkutut"] print(x is y) # output : False

Kita bisa lihat bahwa dengan menggunakan metode .copy(), ketika kita menambahkan item “anjing” pada x, item tersebut tidak dimasukkan juga pada y. Dan operasi x is y kini menghasilkan nilai False

Menggunakan Notasi Slicing

Selain metode .copy(), kita juga dapat menyalin list dengan notasi slicing.

    
x = ["kucing", "tupai", "perkutut"] y = x[:] x.append("anjing") print(f'nilai x adalah {x}') # output : nilai x adalah ["kucing", "tupai", "perkutut", "anjing"] print(f'nilai y adalah {y}') # output : nilai x adalah ["kucing", "tupai", "perkutut"]

Dengan notasi slicing [:] artinya adalah kita mengambil nilai dari sebuah list dari index pertama sampai dengan terakhir. Dan hasilnya, notasi ini menghasilkan output yang sama dengan metode .copy()