本节摘要:新形态从哪来?Evo-Devo 给出一条反直觉答案:大多来自旧程序的再编排,而不是凭空造新程序。本章聚焦两条最重要改造管道——基因复制(多一份拷贝就多一份腾挪的自由)与基因共选择/共选(co-option)(把一个基因派到新岗位)。本节用一个简化模型,看你体内一份基因被复制后,两拷贝如何"分工"分化出新功能。
阅读完本节,你应当能够:
发育不是一个基因对应一个结构,而是一个个可被复用的模块(调控模块、信号模块、形态单元),像积木一样在不同身体区域重复登场。Hox 簇、Wnt/sh 信号模块、以及"把细胞做成神经"的转录因子回路,都是经典积木。模块化的好处是:改一个模块(改了它的时间、位置、强度)就能局部改形态,而不必推倒重来。这种"模块可微调"正是演化能快速做出多样性的原因。
把一份基因复制成两份,原始拷贝继续干活,多出的那份暂时"失业",于是获得了自由突变而不连累正常功能的缓冲期。这大大提高了"试出新功能"的命中率:
著名的 Hox 家族就是远古多轮复制的产物——多个拷贝被分别派去管理身体不同段落(前部、中段、后部各司其职)。果蝇 Hox 的一个点突变式改造,就能让触角长成腿,足见这套模块的"可改写性"。
我用随机的纯突变模型把"复制后两拷贝如何分化"演给你看:假设原始基因同时服务两个阵地(它可以打开下游 A、也可以打开下游 B)。复制成两份后,每份随机丢失(退化)部分对 A/B 的能力,最后统计这样"随机分工"能否拼出一个保 A、一个保 B 的稳定组合——这正是亚功能化的雏形。
import random random.seed(7) # 一份基因本可同时服务岗位A与B;复制成两份后,随机各自退化某些能力 n_run = 4000 ok_subfunc = 0 # 恰出现"一份偏A + 一份偏B"的分工 capable = {"A": 0, "B": 0, "A_B": 0, "none": 0} for _ in range(n_run): def loss(skills): # 每拷贝以0.5概率逐项丢失能力 out = set(skills) for s in list(out): if random.random() < 0.5: out.discard(s) return out copy1 = loss({"A","B"}) copy2 = loss({"A","B"}) if copy1 == {"A"} and copy2 == {"B"}: ok_subfunc += 1 tag = "A_B" if {"A","B"} <= (copy1|copy2) else "none" capable[tag] += 1 print(f"模拟 {n_run} 次随机复制退化:两拷贝能互补保住A与B的次数 = {ok_subfunc}") print(f"存活两拷贝联合仍覆盖A与B的比例 = {capable['A_B']/n_run:.3f}")
结论很直观:即使退化是纯粹随机的,也有约 1/4 的次数"两拷贝联手仍能保住这两个岗位"——而一旦保住,两拷贝就能各自朝更专的方向漂移。真实细胞里的调控因子比这个模型复杂得多,但"复制让冗余缓冲随机损伤、冗余再转成分工"的机理是不变的。演化就是这样,用邻近的拷贝把风险分散、把创新机会攒下来。
有些"创新"根本不需要新基因——把现成就已有的基因/模块,换一个工作场合就行。这在演化里叫共选(co-option),是比基因复制更"省事"的创新。例子俯拾皆是:
共选的核心洞见:新功能常是"旧工具换岗位",不是"造新工具"。 这也再次呼应 7.1 节的异时/异位——把程序放对时间、放对位置,就是共选的实践机制。
基因复制提供新的模板冗余(为突变与分工备好缓冲),共选提供旧模板的新岗位(为同一个基因找到强身之处)。二者常叠加:复制出一份新拷贝 → 为其找到新岗位(共选)→ 岗位固定 → 下一轮演化再次循环。你读第 3 章的分化、第 4 章的器官、第 7 章的整体,都会反复撞见这套"复制 + 改派"的引擎。
⚠️ 常见坑:误以为"新结构=新基因"或"同一基因=同一功能"。大量新结构来自老基因的再部署(共选),同一基因在不同物种、不同阶段能承担截然不同的任务。判断一个结构是否"创新",先问它是新造,还是老程序改了位置与时间。