メモリの場所自体を変更せずにメモリの場所に保持されている値を変更できる場合にのみ、何かが変更可能です。
コツは、変更前と変更後のメモリ位置が同じである場合、変更可能であるということです。
たとえば、リストは変更可能です。どうやって?
>> 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.
文字列は不変です。どうすればそれを証明できますか?
> a = "hello"
> a[0]
'h'
# Now let's modify it
> a[0] = 'n'
----------------------------------------------------------------------
我々が得る
TypeError: 'str'オブジェクトはアイテムの割り当てをサポートしていません
そのため、文字列の変更に失敗しました。文字列は不変です。
再割り当てでは、変数を変更して新しい場所自体を指すようにします。ここでは、文字列を変更していませんが、変数自体を変更しています。以下はあなたがしていることです。
>> a = "hello"
>> id(a)
139767308749440
>> a ="world"
>> id(a)
139767293625808
id
再割り当ての前後は異なるため、これは実際には変異していないが、変数を新しい場所にポイントしていることを証明します。これはその文字列を変更するのではなく、その変数を変更することです。