我必須要修正我的用語,這不是"真正"的 copy-on-write謝謝 uranusjr 的補充 :)真正的 copy-on-write 是在 write 時拷貝物件,即便是reference 也要在 write 時才被拷貝,而不是一開始拷貝如果有一億個 list elements 搭配 COW,不會有 O(n) 的拷貝成本存在於建立第二份 list 時另外之所以我會用是否"完整"的用詞是維基百科對於 COW的定義,某種策略上是有用指標來只到原始版本的
https://goo.gl/HiAM5V 但是我不認為這是真正的COW就是因為真正大家談及的COW,都是像 fork child process在還沒有修改原始版本前,不應該存在有額外的消耗就是或者應該說 C++ 拷貝 list<Foobar *> 假設 Foobar 是成本超高的大物件,在寫入時作出副本,也是某種程度的COW,對於該大物件而言。只是 Python 根本就是建立了新物件,然後把參照給換掉,因為數字是 immutable obj跟 COW 的策略一點關係都沒有,因為新物件不是它建立的真正的 COW 要是全自動的,對使用者來說是透明無感的。另外如同維基百科寫的 std::string 有 COW 實作有空的人不仿可以看看實作方法,我相信是拷貝指標 :P因此用"完整"一詞會更好,完整的COW連指標都不會拷貝但這還是端看實作,跟到底被 COW 的對象是什麼物件而定