You shouldn't try to calculate x^y directly for huge values of y - as has already been pointed out, this is pretty difficult to do (takes lots of space and processing power). You need to look at algorithms that solve the problem for you with fewer multiplication operations. Take a look at: http://en.wikipedia.org/wiki/Exponentiation_by_squaring for starters.
Modular exponentiation is also pretty well understood: http://en.wikipedia.org/wiki/Modular_exponentiation.
You will need to use a python library for large numbers, such as http://gmpy.sourceforge.net/.
If it's any help, I did modular exponentiation in C using mpir. I'll attach that code, you'll need to convert it to python of course.
int power_modn( mpz_t c, mpz_t b, mpz_t e, mpz_t n) { mpz_t result; mpz_t one; mpz_t r; mpz_t modulus; mpz_t exponent; mpz_t base; mpz_init(modulus); mpz_init(exponent); mpz_init(base); mpz_init(result); mpz_init(one); mpz_init(r); mpz_set_ui(result, 1); mpz_set_ui(one, 1); mpz_set(base, b); mpz_set(exponent, e); mpz_set(modulus, n); while ( mpz_cmp_ui(exponent, 0) > 0 ) { if ( mpz_mod_ui( r, exponent, 2) == 1 ) { mpz_mul(result, result, base); mpz_mod(result, result, modulus); }; mpz_mul(base, base, base); mpz_mod(base, base, modulus); mpz_fdiv_q_ui(exponent, exponent, 2); } mpz_set(c, result); return 0; }