0:00:00.000,0:00:03.000 目前為止我教了你們 mutation 0:00:03.000,0:00:05.000 修改已存在的物件 (object) 0:00:05.000,0:00:10.000 但是你還無法真正了解,跟處理字串有甚麼不同 0:00:10.000,0:00:14.000 引入新變數,能夠讓我們真正地了解它們之間的差異 0:00:14.000,0:00:17.000 回到之前的例子 0:00:17.000,0:00:19.000 現在我要加入一個額外的指定陳述 0:00:19.000,0:00:23.000 引入新變數 0:00:23.000,0:00:25.000 假定新變數為 q 0:00:25.000,0:00:29.000 將 p 的值指定給 q 0:00:29.000,0:00:31.000 意思是 p 的值,這個列表物件 0:00:31.000,0:00:34.000 q 現在指向了它 0:00:34.000,0:00:37.000 重要的是,執行指定之後 0:00:37.000,0:00:40.000 p 和 q 指向同一個列表 0:00:40.000,0:00:43.000 假定執行指定陳述 0:00:43.000,0:00:50.000 修改 q 中一個元素的值 0:00:50.000,0:00:53.000 嗯,改變 q 的第 4 個元素 0:00:53.000,0:00:55.000 這是 q 的第 4 個元素 0:00:55.000,0:00:58.000 把值改為 0:00:58.000,0:01:01.000 新的驚嘆號 0:01:01.000,0:01:03.000 p 的值也同時被改變 0:01:03.000,0:01:07.000 即使指定陳述沒有提及 p 0:01:07.000,0:01:11.000 事實上 p 和 q 指向同一個物件 0:01:11.000,0:01:13.000 所以也改變了 p 的值 0:01:13.000,0:01:15.000 字串則不是如此 0:01:15.000,0:01:17.000 我們用字串試試看 0:01:17.000,0:01:20.000 大家能否猜出,以指定來改變字串的第一個字母 0:01:20.000,0:01:23.000 會出現什麼情況 0:01:23.000,0:01:25.000 執行看看,會發生什麼事? 0:01:25.000,0:01:27.000 結果得到錯誤 (error) 0:01:27.000,0:01:30.000 錯誤的原因,是因為字串不是變種的 (not mutable) 0:01:30.000,0:01:32.000 我們不能改變字串的值 0:01:32.000,0:01:36.000 error 說:不可以在字串裡做指定 0:01:36.000,0:01:41.000 因為這類的物件是不可變的、不支持指定陳述 0:01:41.000,0:01:44.000 變種的 (mutable) 物件和非變種 (immutable) 的物件的[br]主要區別在於 0:01:44.000,0:01:47.000 一旦物件是變種的 (mutable) 0:01:47.000,0:01:51.000 我們必須顧慮其他的變數,看看它們是否指向同一個物件 0:01:51.000,0:01:53.000 我們可以改變某物件的值 0:01:53.000,0:01:57.000 它影響的不僅是我們改變的這個變數 0:01:57.000,0:02:00.000 還會改變其他變數的值 0:02:00.000,0:02:02.000 舉個例子 0:02:02.000,0:02:07.000 初始化 p 為包含字串 'Hello' 的列表 0:02:07.000,0:02:11.000 現在有個陳述,引入了新變數 q 0:02:11.000,0:02:13.000 將 p 指定給 q 0:02:13.000,0:02:15.000 印出 p 和 q 的值 0:02:15.000,0:02:19.000 可以看到變數 p 和 q 都包含字串 'Hello' 0:02:19.000,0:02:23.000 但是現在我們改變位置 0 的值 0:02:23.000,0:02:26.000 做一個指定 0:02:26.000,0:02:30.000 將 p 的位置 0 的值儲存為字母 'Y' 0:02:30.000,0:02:35.000 這改變了 p 的值 0:02:35.000,0:02:43.000 但令人驚訝的是,這同時改變了 q 的值 0:02:43.000,0:02:46.000 即使指定陳述完全沒有提及 q 0:02:46.000,0:02:49.000 q 的值發生改變是因為 0:02:49.000,0:02:52.000 q 和 p 指向同個物件