# 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]?
答案 0 :(得分:1)
他们是不同的流程。由于现在每个现代系统都使用虚拟内存,因此您在应用程序中看到的地址并不真正对应于信息的物理存储位置。相同的地址可以用于不同的应用程序:堆中的某个地方,映射到磁盘文件,映射到显示设备,不存在或完全不同的东西。
当进程分叉时,它将保留父进程的逻辑内存 - 否则所有指针都需要更新。但是,在进行更改后,地图将指向完全不同的物理内存区域。