Copy and Repetition is Shallow

Copy is shallow

Proses copy atau penggandaan pada objek list adalah shallow copy. Yang saya tangkap dari tutorial ini terjadi pada nested list. Sulit menjelaskan dengan kata-kata, tentunya dengan gambar dan REPL akan lebih jelas.

Pertama kita deklarasi list a, dengan isi 2 buah list of integer. a = [ [1, 2], [3, 4] ]



Kemudian kita lakukan copy list dengan cara b = a [:], hasil copy akan sama dengan metode lainnya (constructor list ataupun metode copy dari list).

Yang terjadi adalah dibuat suatu list baru untuk b, dengan isinya tetap mereferensikan pada nested list dari a (2 list yang berisi 2 angka integer)



Dapat kita uji, isi list a dan b adalah sama. Walaupun a dan b adalah objek list yang berbeda, tetapi mereferensik ke list didalamnya tetap sama.

Pada REPL bisa dilakukan perintah a is b yang akan menghasilkan return False, namun bila a == b akan menghasilkan return True. Karena secara isi mereka memiliki nilai yang sama (dan mereferensikan ke list nested yang sama)



Jika kita menambahkan item pada list, pada contoh gambar ditambahkan a[1].append(5). Maka hasil append akan berefek pada list b juga.






Jadi dapat diambil kesimpulan, hasil copy list of list, akan membuat objek list baru pada level teratasnya saja, bila list tersebut berisi list lagi, ini tidak akan dibuat objek list baru. 

Yang pasti, dengan mengerti apa yang terjadi behind the scene... kita sudah tahu behaviournya, dapat menghindari stress dan galau saat membuat program. Jangan kita bingung, list udah di copy, tapi mengubah 1 list koq efek ke list yang lainnya.

Repetition is shallow

Sebagai tambahan,  selain proses copy, proses repetition juga shallow. List dapat digandakan dengan menggunakan operator *

Contoh: s = [0] * 3, maka akan menghasilkan list s [0, 0, 0]

Bila repetesi dilakukan pada list of list, proses penggadaan hanya pada objek teratas, tidak pada value nya sama seperti prose copy diatas

Pada contoh dibawah adalah membuat list s dengan isi list yang mempunyai nilai [-1, 1] yang di repetisikan 5 kali.

Python akan membuat objek integer -1 dan 1, lalu direferensikan dengan objek list, yang di referensikan lagi dengan objek list (gambar paling atas)


Lalu python akan menggandakan list yang kedua sebanyak lima kali, lalu dismis list teratas.


Setelah itu direferensikan dengan variable S.


Bila kita melakukan modifikasi, pada contoh dilakukan append, maka modifikasi akan berefek pada pada semua list.


Copy and Repetition is Shallow Copy and Repetition is Shallow Reviewed by noname needed on June 04, 2018 Rating: 5

No comments:

Powered by Blogger.