Почему адрес данных numpy.ndarray меняется? - PullRequest
0 голосов
/ 03 октября 2018

Я недавно запустил это в блокноте jupyter (ячейке), потому что я хотел проверить поведение адреса памяти в массивном массиве при нарезке.Однако нарезка не приведена, чтобы создать минимальный неудачный пример.

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 (6c8) на 0x7f04073a6b88 (b88)?

ОБНОВЛЕНИЕ, в отношении комментария jdehesa

Это также происходит в «сыром» питоне 3.6, так что это не связано с IPython или Jupyter.

Удивительно, ноэто происходит только при использовании one print-Statement для трех значений.

$ 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>
...