Skip to content Skip to sidebar Skip to footer

Is Python Bitwise Shift Really Slow?

I must be overlooking something, but really don't see why the Python code is so slow... Counting unique elements in an array where elements are in the range [−1,000,000..1,000,00

Solution 1:

Just trying to reply directly to the question you posed. It is not a simple question to answer why Python takes 9 seconds and Java is 50 times faster. Here you can get a good insight of a precedent discussion Is Python slower than Java/C#?

The way I like to look at it, is that Java is a Object Oriented language, while python is Object Based.

When looking at a bitwise operation, Java uses the primitive data types that are arguably faster due to not having boxing-unboxing operations and wrappers as a layer of abstraction. So looking at your code at every iteration python re-wrappes the integer as an object of type integer, while Java does not.

But again, I wouldn't take for granted that Java is always faster than Python. It is up to which library you are using and which problem you are trying to solve!

Solution 2:

The pythonic way to do this is

defsolution(array):
    returnlen(set(array))

It is much faster, though will probably use more memory.

The set solution ran in about 100 ms for 10**6 samples from a 2*10**6 range. I didn't even time the bit array because it took seconds.

When talking about lists on the order of 10**6, it is worth the trade off. Using sys.getsizeof, I measured the intermediate set as using 4.2 times the memory of the list. The equivalent int bit array has about 1/30 the memory of the list. This is on a 64 bit Linux system.

Post a Comment for "Is Python Bitwise Shift Really Slow?"