Python2 -> Python3 is a big change - more than Python1 -> Python2 was, and more than Python3 -> Python4 will be.
The biggest change is that strings are unicode by default instead of a bunch of octets. Also, parts of the extension module API changed.
The one people complain about the most is probably that print became a function instead of a statement.
Originally, the core team wanted us to run our code through 2to3, but a lot of people have been finding that writing code to work on both as a single codebase, works pretty well.
Worse than a segfault, we’re changing the public API. No more argument names like “n” or “w” means ppl using those keyword arguments will need to rewrite stuff. Also im making all of the algorithms use an SDR object instead of lists of floats, which is another big change for the existing users to deal with. In the near future we hope to rename / reorganize all of the modules …
I’m sympathetic to the desire to have non-mathy-terse names in code.
When I worked on a bloom filter module, I found that the literature tended to use “n” and “p” as variable names, which I didn’t care for much. So I started using ideal_num_elements_n and error_rate_p.
I hope the changes can be incorporated into the relevant bits of documentation.