结论:clone() 是显式的深拷贝方法(来自 Clone trait),可能涉及堆内存分配等昂贵操作;Copy 是隐式的按位复制标记 trait,只适用于完全位于栈上、不含堆资源的类型,复制代价可忽略。

展开:二者关系是 Copy: Clone——所有 Copy 类型必须也能 Clone,且其实现通常就是按位复制。设计哲学是"显式表达代价":廉价复制隐式发生(Copy),昂贵复制必须写出来(.clone()),让性能开销在代码中可见。易错点:①实现了 Drop 的类型不能实现 Copy,否则按位复制导致析构跑两次造成 double free;②Copy 是编译器自动使用的标记 trait,不能自定义复制逻辑,要定制复制行为应实现 Clone;③&T 是 Copy 而 &mut T 不是。追问方向:为什么不能给 String 实现 Copy?按位复制"指针+长度+容量"会产生两个所有者指向同一堆内存,析构时双重释放。

#[derive(Clone)]
struct Config { name: String }  // 不能 derive Copy:含 String

#[derive(Clone, Copy)]
struct Point { x: f64, y: f64 } // 纯栈数据,可以 Copy