当一个进程fork出一个子进程时,子进程不会复制父进程的变量。但是,如果子进程修改了父进程变量的值,它将创建一个新的变量,这被称为写时复制。现在请看下面的代码:
如果你运行它,结果可能会像这样:
我的问题是:
(1) 变量值的内存地址相同,为4321407056。 但我已经改变了值,也就是把新值写入变量,为什么内存地址没有改变呢?
(2) 如果它们具有相同的内存地址,为什么它们的值不同,一个是[2],另一个是[234]?
# coding=utf-8
import os
value = []
res = os.fork()
if res == 0:
value = [324]
print 'child id={id} value={value}'.format(id=id(value), value=value)
else:
value = [2]
print 'parent id={id} value={value}'.format(id=id(value), value=value)
如果你运行它,结果可能会像这样:
parent id=4321407056 value=[2]
child id=4321407056 value=[324]
我的问题是:
(1) 变量值的内存地址相同,为4321407056。 但我已经改变了值,也就是把新值写入变量,为什么内存地址没有改变呢?
(2) 如果它们具有相同的内存地址,为什么它们的值不同,一个是[2],另一个是[234]?