Jika Anda datang ke Python dari bahasa di C / Java / etc. keluarga, mungkin membantu Anda untuk berhenti memikirkan asebagai "variabel", dan mulai memikirkannya sebagai "nama".
a,, bdan cbukan variabel yang berbeda dengan nilai yang sama; mereka berbeda nama untuk nilai identik yang sama. Variabel memiliki tipe, identitas, alamat, dan segala macam hal seperti itu.
Nama tidak memiliki semua itu. Nilai memang, tentu saja, dan Anda dapat memiliki banyak nama untuk nilai yang sama.
Jika Anda memberikan Notorious B.I.G.hot dog, * Biggie Smallsdan Chris Wallacemiliki hot dog. Jika Anda mengubah elemen pertama amenjadi 1, elemen pertama bdan cadalah 1.
Jika Anda ingin tahu apakah dua nama memberi nama objek yang sama, gunakan isoperator:
>>> a=b=c=[0,3,5]
>>> a is b
True
Anda kemudian bertanya:
apa yang berbeda dari ini?
d=e=f=3
e=4
print('f:',f)
print('e:',e)
Di sini, Anda mengubah nama emenjadi nilai 4. Itu tidak memengaruhi nama ddan fdalam cara apa pun.
Di versi Anda sebelumnya, Anda ditugaskan untuk a[0], bukan ke a. Jadi, dari sudut pandang a[0], Anda memberontak a[0], tetapi dari sudut pandang a, Anda mengubahnya di tempat.
Anda dapat menggunakan idfungsi ini, yang memberi Anda beberapa nomor unik yang mewakili identitas suatu objek, untuk melihat secara tepat objek mana yang bahkan ketika istidak dapat membantu:
>>> a=b=c=[0,3,5]
>>> id(a)
4473392520
>>> id(b)
4473392520
>>> id(a[0])
4297261120
>>> id(b[0])
4297261120
>>> a[0] = 1
>>> id(a)
4473392520
>>> id(b)
4473392520
>>> id(a[0])
4297261216
>>> id(b[0])
4297261216
Perhatikan bahwa a[0]telah berubah dari 4297261120 menjadi 4297261216 — sekarang nama untuk nilai yang berbeda. Dan b[0]sekarang juga menjadi nama untuk nilai baru yang sama. Itu karena adan bmasih menamai objek yang sama.
Di bawah selimut, a[0]=1sebenarnya memanggil metode pada objek daftar. (Ini setara dengan a.__setitem__(0, 1).) Jadi, itu tidak benar - benar memberontak sama sekali. Ini seperti menelepon my_object.set_something(1). Tentu, kemungkinan objek tersebut memutihkan atribut instance untuk mengimplementasikan metode ini, tetapi bukan itu yang penting; Yang penting adalah Anda tidak menetapkan apa pun, Anda hanya memutasikan objek. Dan itu sama dengan a[0]=1.
pengguna570826 bertanya:
Bagaimana jika kita punya, a = b = c = 10
Situasi yang persis sama dengan a = b = c = [1, 2, 3]: Anda memiliki tiga nama dengan nilai yang sama.
Tetapi dalam kasus ini, nilainya adalah int, dan ints tidak berubah. Dalam kedua kasus tersebut, Anda dapat mengubah nilai ake nilai yang berbeda (misalnya, a = "Now I'm a string!"), tetapi tidak akan memengaruhi nilai asli, yang bdan cmasih akan menjadi nama untuk. Perbedaannya adalah bahwa dengan daftar, Anda dapat mengubah nilainya [1, 2, 3]menjadi [1, 2, 3, 4]dengan melakukan, misalnya a.append(4),; karena itu sebenarnya mengubah nilai yang bdan cmerupakan nama untuk, bsekarang akan b [1, 2, 3, 4]. Tidak ada cara untuk mengubah nilai 10menjadi hal lain. 10adalah 10 selamanya, sama seperti Claudia vampir adalah 5 selamanya (setidaknya sampai dia digantikan oleh Kirsten Dunst).
* Peringatan: Jangan berikan hot dog Notorious BIG. Gangsta rap zombie tidak boleh diberi makan setelah tengah malam.
a,bdanc,semua titik dengan nilai yang sama (dalam hal ini daftar), atau Anda ingina=0,b=3danc=5. Dalam hal ini, Anda inginkana,b,c = [0,3,5]atau adila,b,c = 0,3,5.