A.2_关于复制和覆盖
A.2 关于复制和覆盖
首先作为预备知识了解一下ndarray实例的“复制”和“覆盖”。先看看下面的代码。
>>> import numpy as np
>>> x = np.array(1)
>>> id(x)
4370746224
>>> x += x # 覆盖
>>> id(x)
4370746224
>>> x = x + x # 复制(新创建)
>>> id(x)
4377585368从 的结果可以看出, (ndarray实例)要么在内存中被覆盖,要么被重新创建。在使用加法赋值运算符 时, 的对象ID不变,也就是说内存位置相同,所以只有值被改写了。这种不执行复制操作,直接覆盖内存中的值的运算叫作in-place运算。
而 导致对象的ID不同。这说明新的ndarray实例在内存的另一个位置被创建。从内存使用的角度来看,使用in-place运算更好(如果in-place运算没有问题)。

函数id返回Python对象的ID。id函数的返回值取决于实际运行的时间和环境。