What are the top gotchas for someone moving from a static lang (java/c#) to dynamic language like python?
It seems cool how things can be done, but renaming a method, or adding/removing parameters seems so risky!
Is the only solution to write tests for each method?
Some things that struck me when first trying out Python (coming from a mainly Java background):

Write Pythonic code. Use idioms recommended for Python, rather than doing it the old Java/C way. This is more than just a cosmetic or dogmatic issue. Pythonic code is actually hugely faster in practice than C-like code practically all the time. As a matter of fact, IMHO a lot of the "Python is slow" notion floating around is due to the fact that inexperienced coders tried to code Java/C in Python and ended up taking a big performance hit and got the idea that Python is horribly slow. Use list comprehensions and map/filter/reduce whenever possible.
Get comfortable with the idea that functions are truly objects. Pass them around as callbacks, make functions return functions, learn about closures etc.
There are a lot of cool and almost magical stuff you can do in Python like renaming methods as you mention. These things are great to show off Python's features, but really not necessary if you don't need them. Indeed, as S. Lott pointed out, its better to avoid things that seem risky.
top gotchas for someone moving from a static lang (java/c#) to dynamic language like python