【发布时间】:2018-04-16 19:08:17
【问题描述】:
以下代码:
import numpy as np
x=np.array([1,-1,-1,1])
y = 0.5 * (x + 1)
id(x[0])==id(y[0])
输出为 True,但是如果我为 x[0]=1212 分配一个新值,则输出为
id(x[0])==id(y[0])
也是正确的。但是x[0] 和y[0] 的值是不同的。为什么?
【问题讨论】:
-
更有趣的是:
id(x[0]) == id(y[2]),这也总是正确的,不管重新分配。所有这一切仅适用于numpy.ndarrays,正常的lists 的行为与您预期的一样。 -
x[0],创建一个表示该值的 new Python 对象。一旦 LHSid(x[0])被计算出来,before RHS 被计算出来,Python 对象x[0]的引用计数就降为 0,并且它占用的内存可以被重用。在创建y[0]时,它只是使用x[0]占用的内存。某处有重复的问题...