บางสิ่งจะเปลี่ยนแปลงได้ก็ต่อเมื่อเราสามารถเปลี่ยนค่าที่เก็บไว้ในตำแหน่งหน่วยความจำโดยไม่ต้องเปลี่ยนตำแหน่งหน่วยความจำเอง
เคล็ดลับคือ: หากคุณพบว่าตำแหน่งหน่วยความจำก่อนและหลังการเปลี่ยนแปลงเหมือนกันแสดงว่าไม่แน่นอน
ตัวอย่างเช่นรายการไม่แน่นอน อย่างไร?
>> 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
ก่อนและหลังการกำหนดใหม่จะแตกต่างกันดังนั้นจึงพิสูจน์ได้ว่าคุณไม่ได้กลายพันธุ์ แต่ชี้ตัวแปรไปยังตำแหน่งใหม่ ซึ่งไม่ได้กลายพันธุ์สตริงนั้น แต่เป็นการกลายพันธุ์ตัวแปรนั้น