Yes, I am pretty sure A as main is not the same as the one in import A which ends up in sys.modules. So A exists twice, once as main, once as a module. Added a third module, C and you see that the B to C semantics meet your expectation - B and C share a common A.
A.py
import sys
print len(sys.modules), "len(sys.modules):A top"
import B, C
print len(sys.modules), "len(sys.modules):A after import B, C"
values = []
if __name__=="__main__":
values.append('something')
print "A:", values, 'id:',id(values)
B.printValues()
C.printValues()
B.py
import sys
print len(sys.modules), "len(sys.modules):B top"
import A
print len(sys.modules), "len(sys.modules):C after A import"
def printValues():
print "B:", A.values, "id:", id(A.values)
C.py
import sys
print len(sys.modules), "len(sys.modules):C top"
import A
print len(sys.modules), "len(sys.modules):C after A import"
def printValues():
print "C:", A.values, "id:", id(A.values)
and this all outputs:
42 len(sys.modules):A top
43 len(sys.modules):B top
44 len(sys.modules):A top
45 len(sys.modules):C top
45 len(sys.modules):C after A import
45 len(sys.modules):A after import B, C
45 len(sys.modules):C after A import
45 len(sys.modules):A after import B, C
A: ['something'] id: 4493313232
B: [] id: 4493269616
C: [] id: 4493269616