The PDF format is diverse enough for such a new project to still have plenty of incompatibilities. If you wanted to find many of them quickly, you might want to have a look at the documents used as test cases in other projects, such as pdf.js:
J is for complex numbers. While math.sqrt(-1) raises an exception, cmath.sqrt(-1) returns 1j.
There is not distinction between values and references in python, everything is a reference. In fact, primitive like numbers are big struct objects in cpython, you cannot just manipulate the raw numbers.
The difference will rather wether you can modify an object or not. You cannot modify numbers, as they are immutable. Any increment will produce a new object. But you can modify a list. This gives the feeling numbers are passed as values and list are passed as references.
I wish you good luck, this file format has tripped up many, many a developer. It blew up on a pdf I had lying around:
as it seems a string with nested parens jams up the parser