The following variables seem to be similar but they aren't and I don't understand why:
import ujson
import numpy as np
arr = np.array([1, 2, 3, 4])
arr_1 = arr.tolist()
arr_2 = list(arr)
arr_1 == arr_2 # True
ujson.dumps({'arr': arr_1}) # it works
ujson.dumps({'arr': arr_2}) # it does not work (OverflowError: Maximum recursion level reached)
I am using Python-3.5.6, ujson-1.35 and numpy-1.16.4.
Thank you a lot for your help!!
numpy
has its own numeric data types for different levels of precision.
These are created in ways that allow easy comparison with regular Python integers.
np.int32(3) == 3 # True
[np.int32(1), 4] == [1, np.int32(4)] # True
(Lists are equal in Python if all elements at the same index are equal)
That is why your arr_1 == arr_2
.
They cannot readily be serialized to json, but the tolist
method converts them to regular Python numeric types which do allow serialization.