A MAC address is the physical address of the layer two medium, and in general will remain with the hardware it is allocated to - in a physical nic, it resides in the firmware or flash on the nic. MAC addresses can be spoofed such as with macchanger
on linux so as usual, nothing is concrete. They can also be altered in flash - in some cases fairly easily. However, as the MAC address is bound to hardware, the MAC address changes with hardware changes, not with network changes.
In the case of virtual hardware, it is largely the same deal, except the allocation of a mac address is up to the host, effectively it "creates" the nic that is given to the guest, and so seeing as none of it is real, the mac is made up, and can be changed at any time. It rarely is however. A mac address remaining static is good for virtual platform providers as they can measure all sorts of things based on mac, and of course, allocating IP addresses.