salinan python saat ditulis, benarkah?

ketika suatu proses mem-fork seorang anak, anak tersebut tidak akan menyalin variabel ayah tetapi jika proses anak mengubah nilai variabel ayah, maka akan membuat variabel baru, kami menyebutnya salinan saat menulis, sekarang silakan lihat kode di bawah ini:

# 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)

jika dijalankan, hasilnya mungkin seperti ini:

parent  id=4321407056 value=[2]
child  id=4321407056 value=[324]

pertanyaanku adalah :

(1) alamat memori nilai variabelnya sama, yaitu 4321407056. tetapi saya telah mengubah nilainya, artinya saya menulis nilai baru ke variabel tersebut, mengapa alamat memori tidak diubah?

(2) jika keduanya memiliki alamat memori yang sama, mengapa nilainya berbeda, yang satu adalah [2], yang lainnya adalah [234]?


person kwsy    schedule 22.09.2017    source sumber
comment
en.wikipedia.org/wiki/Virtual_memory   -  person user2357112 supports Monica    schedule 22.09.2017
comment
Memori virtual menjelaskan alamat yang sama untuk kedua proses tetapi mengapa alamat tersebut tidak berubah setelah penugasan?   -  person geckos    schedule 22.09.2017


Jawaban (1)


Itu adalah proses yang berbeda. Karena setiap sistem modern sekarang menggunakan memori virtual, alamat yang Anda lihat di aplikasi tidak benar-benar sesuai dengan tempat penyimpanan informasi secara fisik. Alamat yang sama bisa untuk aplikasi yang berbeda: di suatu tempat di heap, dipetakan ke file disk, dipetakan ke perangkat tampilan, tidak ada, atau sesuatu yang sama sekali berbeda.

Saat proses bercabang, itu akan menyimpan peta memori logis induknya - jika tidak, semua petunjuk perlu diperbarui. Namun peta akan menunjuk ke wilayah memori fisik yang benar-benar berbeda setelah perubahan dilakukan.

person viraptor    schedule 22.09.2017