lets say that your process got the name var X, which has a virtual address of 100 and a physical address of 200. PTE keeps mapping addresses from virtual 100 to physical 200.
after the fork, each process (parent and child) will have its own private PTE. at this point, both PTEs will map virtual 100 to physical 200.
as long as both processes are simply read from there, they will both read from physical address 200.
when the first one tries to write there, the data from the physical address will be copied to the new physical space, say 300, and its (and only it) PTE will be updated, so that the virtual 100 will be mapped to the physical 300. Thus, it is transparent to the process, therefore that he is still using the same (virtual) address.
* Note: this is just an abstraction, and the real thing happens in the resolution of the page.
source share