视图和赋值之间的区别

Abh*_*tia -1 python dictionary numpy scipy

我可以理解赋值、浅拷贝和深拷贝之间的区别。c=a但我仍然不清楚 view( ) 和 assignment( )之间有什么区别c=a.view()。两者都反映了变化并且看起来相同。如果可能的话请举例

我指的是这里的视图:https://docs.scipy.org/doc/numpy-1.11.0/reference/ generated/numpy.ndarray.view.html 。我不确定这些视图的行为与字典视图类似(https://docs.python.org/release/3.0.1/library/stdtypes.html#dictionary-view-objects)。

HYR*_*YRY 5

NumPy 中的数组对象是一个 ndarray 结构,带有data指向数组中原始值的指针。

  • b = a:只需给数组起一个名字即可。
  • c = a.view():创建数组视图a意味着创建一个指向相同原始值的新 ndarray 结构。

这是示例代码:

import numpy as np

a = np.array([1,2,3])
b = a
c = a.view()

print(id(a), id(b), id(c))
print(a.ctypes.data, b.ctypes.data, c.ctypes.data)
Run Code Online (Sandbox Code Playgroud)

输出:

140328594430752 140328594430752 140328594428432
40268384 40268384 40268384
Run Code Online (Sandbox Code Playgroud)
  • a并且b具有相同的id手段,它们是同一个对象。
  • 都具有相同的data指针意味着它们共享相同的原始数据。

这是在内存中创建的内容:

在此输入图像描述

这是关于 ndarray 结构的文档:

http://docs.scipy.org/doc/numpy-1.10.0/reference/c-api.types-and-structurals.html#c.PyArrayObject