Почему изменения в массиве Numpy не отражаются в двух разных случаях? - PullRequest
0 голосов
/ 10 февраля 2019

Меня смущают следующие два кода:

1-й код: изменения отражаются в обоих массивах

    import numpy as nm

    ab=nm.arange(10)
    ba=ab
    ba[0]=99
    print(ba)
    print (ab)

Вывод:

ba=[99  1  2  3  4  5  6  7  8  9]

ab=[99  1  2  3  4  5  6  7  8  9]

2-й код: измененияНЕ отражается в обоих массивах

    import numpy as nm

    ab=nm.arange(10)
    ba=ab
    ba=ab-ab
    print(ba)
    print(ab)

Вывод:

ba=[0 0 0 0 0 0 0 0 0 0]

ab=[0 1 2 3 4 5 6 7 8 9]

Кто-нибудь может объяснить это?Я хочу понять, почему это происходит?Я вижу, что во втором случае выделен новый адрес, но почему бы не перезаписать данные, как в первом случае?

1 Ответ

0 голосов
/ 10 февраля 2019

Переменная, которая содержит массив, фактически содержит адрес памяти, в котором расположен массив, выполнив ba=ab, вы устанавливаете один и тот же адрес для обоих массивов, поэтому, если вы измените один из них, изменения будут отражены вдругой, но, выполнив ba=ab-ab, вы перезаписываете этот адрес результатом оценки , и, поскольку это новые данные, они должны храниться в новом адресе памяти.

...