เมื่อกระบวนการแยกลูก ลูกจะไม่คัดลอกตัวแปรของพ่อ แต่ถ้ากระบวนการลูกเปลี่ยนค่าของตัวแปรของพ่อ มันจะสร้างตัวแปรใหม่ เราเรียกสำเนานี้ว่าการเขียน ตอนนี้โปรดดูโค้ดด้านล่าง:
# 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]