Standart tanimlari mevcut: Value type and reference type - Wikipedia
Fakat deger/referans tipi ayrimi tek basina ise yarayan bir ayrim degil. Kelimeler kimi tartismalari kolaylastirmak icin uretilen bir nevi soyutlama olduklarindan oturu tartismalarin disinda tek baslarina pek bir ise yaramiyorlar.
C’deki herhangi bir pointer turunun referans turu mu yoksa referans degeri tasiyan bir deger turu mu oldugu hangi soyutlama seviyesinden baktiginiza gore degisir ornegin. (Linkteki tablonun dogrulugu da)
O yuzden bu tipler konusulurken onlerindeki tartismayi rica edecegim. Soru gayet guzel mesela:
a = [1,2]
b = [3,4]
a = b
b[0] = 5
print(a[0]) # 5
a = "bir"
b = "iki"
a = b
b = "üç"
print(a) # "iki"
Cevabi basit ve refrerans/deger tipleriyle bir alakasi yok malesef: Yazdigin kodlar farkli, paralellikleri yok.
Ilk kodda a
ile b
ayni objeye isaret (refer) ediyor, biri uzerinden yaptigin degisikligi digeri uzerinden gorebiliyorsun. Ikinci kodda a
ile b
ayni objeye isaret ederken b
’yi degistirip farkli bir objeye isaret ettiriyorsun, herhangi bir degisiklik yok.
Ilk koddaki gibi b[0] = 5; print(a[0])
diybileseydin ayni sonucu alirdin.
Veya, ters perspektiften bakarsak:
Neden?
a = [1,2]
b = [3,4]
a = b
b = [5,6]
print(a)
Burada cikti olarak [5,6]
mi bekliyorsun ki?