weixin_40229805 2022-01-20 15:20 采纳率: 100%
浏览 67
已结题

关于ndarray的问题

import numpy as np
aa=np.array([1,2])
aa.data
Out[278]: <memory at 0x000001BED39961C0>
id(aa[0])
Out[279]: 1919105783888
id(aa[0])
Out[280]: 1919105781968
id(aa.data[0])
Out[281]: 140709382463232
id(aa.data[0])
Out[282]: 140709382463232
aa.__array_interface__['data'][0]
Out[283]: 1919049863168

我有3个问题:

  1. aa.data的值 0x000001BED39961C0是数据所在内存地址吗?
  2. 为什么两次输出id(aa[0])的结果不一样,而同样两次输出id(aa.data[0])结果却是相同的?
  3. id(aa.data[0])和aa.array_interface['data'][0]的值为什么不一样?
  • 写回答

6条回答 默认 最新

  • Love And Program 新星创作者: 人工智能技术领域 2022-01-21 10:16
    关注

    只有aa.data[0]列表本是是内存地址不会变,变得是内部元素的引用,修改其中某一项元素的值,或者添加几个元素,不会改变其本身的地址,只会改变其内部元素的地址引用,但是如果对其进行重新赋值操作时,就会给列表重新赋予一个地址,来覆盖之前的地址这时列表地址会发生改变。其余的变量只是保存了一个引用,并不是指值本身,变量的每一次初始化,都开辟了一个新的空间,将新内容的地址赋值给变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 1月29日
  • 已采纳回答 1月21日
  • 赞助了问题酬金10元 1月20日
  • 创建了问题 1月20日