When use id() to get identity of global variable in different subprocess returns the same value, but when i modify the global variable in subprocess but not work in main process? If id() returns the actual memory address of variable, but why i can't modify the value in subprocess? (I am using Python3.6[CPython] in MacOS)
import os
from multiprocessing import Process
Global_list = []
Global_number = 0
def foo(x):
global Global_list, Global_number
print("Pid {}, id(Global_list)={}, id(Global_number)={}".format(os.getpid(), id(Global_list), id(Global_number)))
Global_list.append(x)
Global_number += x
print("After: Pid {}, id(Global_list)={}, id(Global_number)={}\n".format(os.getpid(), id(Global_list), id(Global_number)))
if __name__ == '__main__':
la = [1, 2, 3, 4]
p_list = []
for i in la:
process = Process(target=foo, args=(i,))
p_list.append(process)
process.start()
for p in p_list:
p.join()
print("In main process, id(Global_list)={}, id(Global_number)={}".format(id(Global_list), id(Global_number)))
print("After all: Global_list={}, Global_number={}".format(Global_list, Global_number))
RESULT:
Pid 42061, id(Global_list)=4347140936, id(Global_number)=4305316864
After: Pid 42061, id(Global_list)=4347140936, id(Global_number)=4305316896
Pid 42062, id(Global_list)=4347140936, id(Global_number)=4305316864
After: Pid 42062, id(Global_list)=4347140936, id(Global_number)=4305316928
Pid 42063, id(Global_list)=4347140936, id(Global_number)=4305316864
After: Pid 42063, id(Global_list)=4347140936, id(Global_number)=4305316960
Pid 42064, id(Global_list)=4347140936, id(Global_number)=4305316864
After: Pid 42064, id(Global_list)=4347140936, id(Global_number)=4305316992
In main process, id(Global_list)=4347140936, id(Global_number)=4305316864
After all: Global_list=[], Global_number=0