Here\'s a concise example:
x.py:
class x:
var = \'from x.py\'
y.py:
class x:
var = \'from y.py\'
This happens because the file creation dates (of z.py and its compiled counterpart z.pyc) are identical, so Python thinks that the file is unchanged and doesn't recompile it.
Actually, when I was trying and re-trying your code, it once worked as expected - probably because the two files happened to be created on either side of the system clock's second-changeover.
import imp
import time
def write_module(filename):
fp = open('z.py', 'w')
fp.write(open(filename).read())
fp.close()
write_module('x.py')
import z
print(z.x.var) # Prints 'from x.py'
time.sleep(1) # Wait one second
write_module('y.py')
imp.reload(z)
print(z.x.var) # Prints 'from y.py'
shows the expected result.