我必须要修正我的用语,这不是"真正"的 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 的对象是什么物件而定