【问题标题】:numpy array memory id [duplicate]numpy数组内存ID [重复]
【发布时间】: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 对象。一旦 LHS id(x[0]) 被计算出来,before RHS 被计算出来,Python 对象 x[0] 的引用计数就降为 0,并且它占用的内存可以被重用。在创建y[0] 时,它只是使用x[0] 占用的内存。某处有重复的问题...

标签: python arrays numpy


【解决方案1】:

答案在于 id 本身的定义。

id 函数返回的数字是多少?

它是“一个整数(或长整数),保证在该对象的生命周期内是唯一且恒定的。” (Python 标准库 - 内置函数)唯一编号。不多也不少。

根据上述定义,无论其值如何,id 都将保持不变。希望对你有所帮助。

【讨论】:

  • id 是变量的内存位置,对吧?两个变量如何在同一个内存位置有不同的值?
猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多