Một cái gì đó chỉ có thể thay đổi khi chúng ta có thể thay đổi các giá trị được giữ trong vị trí bộ nhớ mà không thay đổi chính vị trí bộ nhớ.
Bí quyết là: Nếu bạn thấy rằng vị trí bộ nhớ trước và sau khi thay đổi giống nhau, nó có thể thay đổi được.
Ví dụ: danh sách có thể thay đổi. Làm sao?
>> 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.
Một chuỗi là bất biến. Làm thế nào để chúng tôi chứng minh nó?
> a = "hello"
> a[0]
'h'
# Now let's modify it
> a[0] = 'n'
----------------------------------------------------------------------
chúng tôi nhận được
TypeError: Đối tượng 'str' không hỗ trợ gán mục
Vì vậy, chúng tôi không thể thay đổi chuỗi. Nó có nghĩa là một chuỗi là bất biến.
Khi bạn gán lại, bạn thay đổi biến để trỏ đến một vị trí mới. Ở đây bạn không biến đổi chuỗi mà là biến đổi chính biến. Sau đây là những gì bạn đang làm.
>> a = "hello"
>> id(a)
139767308749440
>> a ="world"
>> id(a)
139767293625808
id
trước và sau khi gán lại là khác nhau, vì vậy điều này chứng tỏ rằng bạn thực sự không đột biến, mà đang trỏ biến đến vị trí mới. Cái nào không phải là đột biến chuỗi đó, mà là thay đổi biến đó.