Yalnızca bellek konumunda tutulan değerleri bellek konumunu değiştirmeden değiştirebildiğimizde bir şey değiştirilebilir.
İşin püf noktası şudur: Değişiklikten önceki ve sonraki bellek konumunun aynı olduğunu fark ederseniz, değiştirilebilir.
Örneğin, liste değiştirilebilir. Nasıl?
>> a = ['hello']
>> id(a)
139767295067632
# Now let's modify
#1
>> a[0] = "hello new"
>> a
['hello new']
Now that we have changed "a", let's see the location of a
>> id(a)
139767295067632
so it is the same as before. So we mutated a. So list is mutable.
Bir dizge değişmezdir. Bunu nasıl kanıtlarız?
> a = "hello"
> a[0]
'h'
# Now let's modify it
> a[0] = 'n'
----------------------------------------------------------------------
anlıyoruz
TypeError: 'str' nesnesi öğe atamasını desteklemiyor
Bu yüzden dizeyi değiştirmede başarısız olduk. Bir dizenin değişmez olduğu anlamına gelir.
Yeniden atarken, değişkeni yeni bir konumu gösterecek şekilde değiştirirsiniz. Burada dizgeyi değiştirmediniz, değişkenin kendisini değiştirdiniz. Aşağıdaki, yaptığınız şeydir.
>> a = "hello"
>> id(a)
139767308749440
>> a ="world"
>> id(a)
139767293625808
id
Yeniden atamadan önce ve sonra farklıdır, bu nedenle bu aslında mutasyona uğramadığınızı, ancak değişkeni yeni konuma yönlendirdiğinizi kanıtlar. Bu dizeyi mutasyona uğratmak değil, değişkeni değiştirmek.