所以,这很奇怪:
>>> arr = np.array([[1, 2], [3, 4]])
>>> arr[0, 1] is arr[0, 1]
False
>>> id(arr[0, 1]) == id(arr[0, 1])
True
>>> arr[0, 1].__array_interface__['data']
(140500408506000, False)
>>> arr[0, 1].__array_interface__
{'data': (140500407499344, False), 'strides': None, 'descr': [('', '<i8')], 'typestr': '<i8', 'shape': (), 'version': 3, '__ref': array(2)}
>>> arr[0, 1].__array_interface__
{'data': (140500408506000, False), 'strides': None, 'descr': [('', '<i8')], 'typestr': '<i8', 'shape': (), 'version': 3, '__ref': array(2)}
>>> arr[0, 1].__array_interface__
{'data': (140500407499344, False), 'strides': None, 'descr': [('', '<i8')], 'typestr': '<i8', 'shape': (), 'version': 3, '__ref': array(2)}
我在这里遇到三个问题:
False
,为什么它们相等?id
?如何在这里检查对象平等?data
中提取array_interface
会显示不同的内存位置,而不请求data
会显示data
的不同值? array_interfaces
,它实际上翻转基础数据引用。这里发生了什么事?This great answer似乎没有解决这些问题。