Argumentos multiproceso de Python: ¿copia profunda?

from multiprocessing import Process # c is a container p = Process(target = f, args = (c,)) p.start() 

Asumo que se pasa una copia profunda de c a la función f porque la copia superficial no tendría sentido en el caso de un nuevo proceso (el nuevo proceso no tiene acceso a los datos del proceso de llamada).

Pero, ¿cómo se define esta copia profunda? Hay un conjunto completo de notas en la documentación copy.deepcopy() , ¿todas estas notas se aplican aquí también? La documentación de multiprocessing no dice nada …

Cuando creas una instancia de Process , bajo el capó Python emite un fork() . Esto crea un proceso secundario cuyo espacio de memoria es una copia exacta de su padre, por lo que se copia todo lo que existe en el momento de la bifurcación .

En Linux esto se hace eficiente a través de “copia en escritura”. De la página del hombre tenedor :

fork () crea un proceso hijo que difiere del proceso padre solo en su PID y PPID, y en el hecho de que las utilizaciones de recursos se establecen en 0. Los lockings de archivos y las señales pendientes no se heredan.

En Linux, fork () se implementa utilizando páginas de copia en escritura, por lo que la única penalización en la que incurre es el tiempo y la memoria necesarios para duplicar las tablas de la página principal y para crear una estructura de tareas única para el elemento secundario.