Python'a C / Java / vb. Bir dilden geliyorsanız. aile, abir "değişken" olarak düşünmeyi bırakmanıza ve onu bir "isim" olarak düşünmeye başlamanıza yardımcı olabilir .
a, bVec eşit değerlere sahip farklı değişkenler değildir; aynı değer için farklı isimler. Değişkenlerin türleri, kimlikleri, adresleri ve bunun gibi her türlü şeyi vardır.
İsimler bunlardan hiçbirine sahip değil. Değerler elbette var ve aynı değer için birçok isme sahip olabilirsiniz.
Notorious B.I.G.Sosisli sandviç verirseniz * Biggie Smallsve Chris Wallacesosisli sandviçiniz varsa. Öğesinin ilk öğesini a1 olarak değiştirirseniz, öğesinin ilk öğeleri bve c1 olur.
İki adın aynı nesneyi adlandırıp adlandırmadığını öğrenmek istiyorsanız, isoperatörü kullanın :
>>> a=b=c=[0,3,5]
>>> a is b
True
Sonra soruyorsun:
bundan farklı olan nedir?
d=e=f=3
e=4
print('f:',f)
print('e:',e)
Burada, adı edeğere yeniden bağlıyorsunuz 4. Bu isimleri etkilemez dvef hiçbir şekilde .
Önceki sürümde, atama edildi a[0], değil a. Yani, bakış açısından a[0], yeniden bağlanıyorsun a[0], ama bakış açısından a, onu yerinde değiştiriyorsun.
Size idbir nesnenin kimliğini temsil eden benzersiz bir sayı veren işlevi, isyardımcı olamadığınızda bile tam olarak hangi nesnenin olduğunu görmek için kullanabilirsiniz:
>>> 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
a[0]4297261120'den 4297261216'ya değiştiğine dikkat edin — artık farklı bir değer için bir ad. Ve b[0]şimdi aynı yeni değer için bir isim. Çünkü ave bhala aynı nesneyi adlandırıyorlar.
Kapakların altında a[0]=1, aslında liste nesnesinde bir yöntem çağırıyor. ( Eşittir a.__setitem__(0, 1).) Yani, gerçekten hiçbir şeyi yeniden bağlamıyor. Aramak gibi my_object.set_something(1). Elbette, muhtemelen nesne bu yöntemi uygulamak için bir örnek özniteliğini yeniden bağlamaktadır, ancak önemli olan bu değildir; önemli olan hiçbir şey atamamanız, sadece nesneyi değiştirmenizdir. Ve ile aynı a[0]=1.
user570826 sordu:
Ya sahipsek a = b = c = 10
Bu tamamen aynı durum a = b = c = [1, 2, 3] : aynı değer için üç adınız var.
Ancak bu durumda, değer an'dır intve ints değişmezdir. Her iki durumda da, afarklı bir değere (örneğin a = "Now I'm a string!") yeniden bağlanabilirsiniz , ancak bu, orijinal değeri etkilemez.b ve chala için isimler olacak. Aradaki fark, bir listeyle değeri [1, 2, 3]olarak değiştirebilmenizdir [1, 2, 3, 4], örneğin a.append(4); çünkü bu aslında bve cisimleri olan değeri değiştiriyor, bşimdi b olacaktır [1, 2, 3, 4]. Değeri 10başka bir şeye değiştirmenin bir yolu yok. 10sonsuza kadar 10, tıpkı Claudia gibi, vampir sonsuza kadar 5 yaşında (en azından onun yerine Kirsten Dunst gelene kadar).
* Uyarı: Notorious BIG sosisli sandviç vermeyin. Gangsta rap zombileri asla gece yarısından sonra beslenmemelidir.
a,bvec,(bu durumda bir liste) aynı değere tüm noktasına veya istediğiniz yapmaka=0,b=3vec=5. Bu durumda ister istersina,b,c = [0,3,5]ister sadecea,b,c = 0,3,5.