This has apparently been discussed half to death on stack overflow already. Here's a summary of the most interesting bits:
Conclusion: math.sqrt
is significantly faster in most Python versions/implementations.
Conclusion: neither, they're both equally (to a rather remarkable level of precision) bad in slightly different ways.
Edit:
For reasons discussed by @MarkDickinson in the comments below, the information in the "Which is more accurate" question linked above is not accurate and is out of date. Which makes sense since it's almost 10 years old.
I can confirm that the tests listed in the accepted answer now return different answers:
(8885558**0.5)**2: 8885558.000000002
math.sqrt(8885558)**2: 8885558.000000002
2**1023.99999999999: 1.7976931348498497e+308
(math.sqrt(2**1023.99999999999))**2: 1.7976931348498495e+308
((2**1023.99999999999)**0.5)**2: 1.7976931348498495e+308
((2**1023.99999999999)**0.5)**2 - 2**1023.99999999999: -1.99584030953472e+292
(math.sqrt(2**1023.99999999999))**2 - 2**1023.99999999999: -1.99584030953472e+292
Try the tests out for yourself online. I got the same results on the online interpreter as I did on a couple of my lab machines (which are admittedly all x86-64).
The word of god (ie Guido)
Guido (the benevolent dictator for life of Python) responded to an email sent by the OP of the "which is faster" question:
pow and ** are equivalent; math.sqrt doesn't work for complex numbers, and links to the C sqrt() function. As to which one is faster, I have no idea...
Though he doesn't directly address the reasons for the duplication, he clearly is aware of it, and points out that at least in certain cases they do have different behavior.