from ctypes import * p1 = pointer(c_long(10)) # x=10; p1=&x; pointer(p1)[0].contents = c_long(20) # y=20; (&x)[0]=&y; # the following might be expected to print 20 twice print p1[0] # p1[0]; or *p1; print pointer(p1)[0][0] # (&p1)[0][0]; or **(&p1);