Chinese, Traditional subtitles

← 03-15 Yello Mutation

dummy description

Get Embed Code
7 Languages

Showing Revision 3 created 08/01/2014 by Fran Ontanaya.

  1. 目前為止我教了你們 mutation
  2. 修改已存在的物件 (object)
  3. 但是你還無法真正了解,跟處理字串有甚麼不同
  4. 引入新變數,能夠讓我們真正地了解它們之間的差異
  5. 回到之前的例子
  6. 現在我要加入一個額外的指定陳述
  7. 引入新變數
  8. 假定新變數為 q
  9. 將 p 的值指定給 q
  10. 意思是 p 的值,這個列表物件
  11. q 現在指向了它
  12. 重要的是,執行指定之後
  13. p 和 q 指向同一個列表
  14. 假定執行指定陳述
  15. 修改 q 中一個元素的值
  16. 嗯,改變 q 的第 4 個元素
  17. 這是 q 的第 4 個元素
  18. 把值改為
  19. 新的驚嘆號
  20. p 的值也同時被改變
  21. 即使指定陳述沒有提及 p
  22. 事實上 p 和 q 指向同一個物件
  23. 所以也改變了 p 的值
  24. 字串則不是如此
  25. 我們用字串試試看
  26. 大家能否猜出,以指定來改變字串的第一個字母
  27. 會出現什麼情況
  28. 執行看看,會發生什麼事?
  29. 結果得到錯誤 (error)
  30. 錯誤的原因,是因為字串不是變種的 (not mutable)
  31. 我們不能改變字串的值
  32. error 說:不可以在字串裡做指定
  33. 因為這類的物件是不可變的、不支持指定陳述
  34. 變種的 (mutable) 物件和非變種 (immutable) 的物件的
    主要區別在於
  35. 一旦物件是變種的 (mutable)
  36. 我們必須顧慮其他的變數,看看它們是否指向同一個物件
  37. 我們可以改變某物件的值
  38. 它影響的不僅是我們改變的這個變數
  39. 還會改變其他變數的值
  40. 舉個例子
  41. 初始化 p 為包含字串 'Hello' 的列表
  42. 現在有個陳述,引入了新變數 q
  43. 將 p 指定給 q
  44. 印出 p 和 q 的值
  45. 可以看到變數 p 和 q 都包含字串 'Hello'
  46. 但是現在我們改變位置 0 的值
  47. 做一個指定
  48. 將 p 的位置 0 的值儲存為字母 'Y'
  49. 這改變了 p 的值
  50. 但令人驚訝的是,這同時改變了 q 的值
  51. 即使指定陳述完全沒有提及 q
  52. q 的值發生改變是因為
  53. q 和 p 指向同個物件