Таким образом, с Numpy массивы назначая одного к другому только копирует ссылочный: т.е.Numpy назначая нарезать, когда массив копируется
import numpy as np
x = np.array([5,8])
y = x
y += 1
x
Out: array([6, 9])
И если я хочу глубокую копию, то я должен использовать x.copy()
. И то же самое верно при представлении из более высокого размерного массива, например.
A=np.array([[4,10],[8,1]])
b=A[:,1]
b+=1
A
Out: array([[ 4, 11],
[ 8, 2]])
И наоборот (продолжая сверху):
A[:,1]=b
b
Out: array([11, 2])
b+=1
A
Out: array([[ 4, 12],
[ 8, 3]])
Так до здесь все работает стабильно. Но теперь, если я продолжать и делать:
A[:,0] = b
A
Out: array([[12, 12],
[ 3, 3]])
b
Out: array([12, 3])
b+=1
A
Out: array([[12, 13],
[ 3, 4]])
То, что я не понимаю, почему первый столбец остается прежним, а другой нет? Почему второй столбец продолжает указывать на массив b? Есть ли какое-либо правило для решения, когда массив будет сильно скопирован при назначении?
Я не знаю, что такое python, но он похож на указатель C++. Вы можете назначить 1 ячейку памяти для нескольких переменных (как и многие переменные, читайте один и тот же указатель памяти), а не 1 переменную для большого объема памяти (1 var read multiple memory pointer) – Vuwox