Python中的list(array)和array.tolist()之间有什么区别吗?

Python中的list(array)和array.tolist()之间有什么区别吗?,python,arrays,python-3.x,list,numpy,Python,Arrays,Python 3.x,List,Numpy,以下变量看起来很相似,但事实并非如此,我不明白为什么: 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 (Overflo

以下变量看起来很相似,但事实并非如此,我不明白为什么:

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)
我使用的是Python-3.5.6、ujson-1.35和numpy-1.16.4

非常感谢你的帮助

用于不同的精度级别

它们的创建方式可以方便地与常规Python整数进行比较

np.int32(3) == 3   # True
[np.int32(1), 4] == [1, np.int32(4)]    # True
()

这就是为什么您的
arr\u 1==arr\u 2


它们不能很容易地序列化为json,但是对于一维数组,.

它是相同的,但是对于更高维度,.toList是递归应用的,而list不会-reference
toList
一路转换它
list()
只在第一个维度上迭代。在本例中,
arr_2
是一个
np.int
对象列表,其中as
arr_1
是一个python整数列表。您的回答是有意义的,但它们如何解释在本例中观察到的行为?但是,最后,arr_1==arr_2,因此我理解这两个变量应该具有相同的行为。我不确定为什么
ujson
有递归错误。也许它试图将
int32
数字表示为类似字典的对象,但失败了。如果使用标准的
json
库,您会发现问题在于它不知道如何序列化
numpy
int32
类型中存储的数字。看见