为什么numpy.ndarray的数据地址会更改?

时间:2018-10-03 10:58:00

标签: python numpy python-3.6 numpy-ndarray

我最近在jupyter笔记本(单元)中运行了此命令,因为我想在切片时验证numpy数组的内存地址行为。但是,切片被忽略了,以创建一个最小的失败示例。

import numpy as np

x = np.zeros(10)

x.data.__repr__(), x.data, x.data.__repr__()

我很惊讶最后一个值与前两个不同:

('<memory at 0x7f04073a6ac8>',
  <memory at 0x7f04073a6ac8>,
 '<memory at 0x7f04073a6b88>')

我在第二个元组项中添加了一个额外的空间,以便直观地对齐内存地址。

jupyter如何对x进行更改,以将x.data.__repr__()0x7f04073a6ac8)尤其是6c80x7f04073a6b88)更改为b88? / p>

更新,没有jdehesa的评论

这也发生在“原始” python 3.6中,因此它与IPython或Jupyter不相关。

令人惊讶的是,这仅在将三个值使用 one 打印语句时发生。

$ cat moving_memory.py 
import numpy as np

x = np.zeros(10)

print(x.data.__repr__())
print(x.data)
print(x.data.__repr__())

print(x.data.__repr__(), x.data, x.data.__repr__())

$ python3.6 moving_memory.py 
<memory at 0x7f3f49b02dc8>
<memory at 0x7f3f49b02dc8>
<memory at 0x7f3f49b02dc8>
<memory at 0x7f3f49b02dc8> <memory at 0x7f3f49b02dc8> <memory at 0x7f3f49b02e88>

0 个答案:

没有答案